public static Boolean valueOf(boolean b){
return b ? Boolean.TRUE : Boolean.FALSE ;
}
可返回所有返回类型的子类(静态工厂方法返回类型为接口时 , 可以返回任意实现此接口的类)
使得创建实例的方法显得更加简洁
public static <K,V> Map<K,V> newInstance(){
return new HashMap<K,V>();
}
Map<String,List<String>> m = HashMap.newInstance();
缺点 :
类如果不含有公有的或者受保护的构造器 , 就不能被子类化 (什么意思 , 没有看懂 (ㄒoㄒ))
静态工厂方法和静态方法本质是一样的 . 不容易被发现并使用静态工厂方法来实例化 .
2. 考虑用构建器 ( Builder ) 来代替多参数的构造器
重载构造器不方便实例化
利用 Builder 方便添加约束条件 ( 在 build 方法的时候抛出 )
可以通过一个 Builder 来实例化多个目标对象
3. 使用枚举来实现单例
即使进行复杂的序列化和反射也无法多次实例化 ( 保证单例的唯一性 )
public enum Jared{
INSTANCE;
public void method(){ ... }
}
4. 使用私有构造器使类不能被实例化
public class UtilityClass{
private UtilityClass(){
}
}
5. 避免创建不必要的对象
重用不可变对象
String s = new String("stringette");//创建了多余的String实例
String s = "stringette";//使用此方法复制 , 而非上面的 .
避免无意识的自动装箱 ( 优先使用基本类型 )
public static void main(String[] args){
Long sum = 0L;//此处使用 Long 声明 sum , 后续处理会自动装箱 , 应该使用 long 声明 .
for ( long i = i ; i < Integer.MAX_VALUE ; i ++ ) {
sum += i ;
}
System.out.println(sum);
}