1.开发中,可以通过静态工厂方法来代替构造方法获取对象实例。
public static Boolean valueOf(boolean b){
return b?Boolean.TRUE:Boolean.FALSE;
}
作用:能为重复调用该方法的程序返回相同的对象(主要针对不可变对象,什么是不可变的对象,即对象在其生命周期内所有信息都不可变的对象)。
2.通过私有构造器强化不可实例化的能力
public class UtilityClass{
private UtilityClass(){
throw new AssertionError();
}
public static final String LOGIN_ERROR = "error";
public static final String LOGIN_SUCCESS = "success";
...
}
用途:阻止该类被实例化。可用于存储系统一些静态变量(改为接口类亦可实现)。
3.消除过期的对象引用(防止内存泄露)
public class Stack{
private Object[] elements;
private int size = 0;
private static final int DEFAULT_CAPITY = 16;
public stack(){
elements = new Object[DEFAULT_CAPITY];
}
public void push(Object e){
ensureCapacity();
elements[size++] = e;
}
public Object pop(){
if(size == 0)
throw new EmptyStackException();
Object result = elements[--size];
elements[size] = null;
return result;
}
private void ensureCapacity(){
if(elements.length == size)
elements = Arrays.copyOf(elements,2*size+1);
}
}
}
4.新代码中尽量不要使用原生态类型(List),可以适当使用泛型
5.可以用SupressWarnings("unchecked")注解来禁止非受检警告,但前提是确保代码的安全。
6.泛型是可擦除的,对于List和List,编译后都是以原生态类型List保存。数组与泛型的最大区别就是数组是具体化的,它在运行时才知道并检查他们的元素类型约束,泛型则只是在编译时强化他们的类型信息,并在运行时擦除其类型信息。数组是协变的,泛型是不可变的。因此,优先使用列表而不是数组。
原文地址:http://blog.sina.com.cn/s/blog_79757ac501016wq4.html