构造方法创建对象:
public Boolean(String s) {
this(toBoolean(s));
}
//调用
Boolean bTrue = new Boolean("true");
静态工厂方法创建对象:
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
//调用
Boolean bTrue = Boolean.valueOf("true");
使用静态工厂方法的好处:
1)它与构造函数不同,它有名字,把名字起的更易于阅读。
如果你想让2个构造函数拥有相同个数和类型的参数,这将是无法实现的;即使是2个不同类型的参数顺序倒置的,使用者也非常容易搞混乱。
2)它与构造函数不同,它每次被调用时,不要求非得创建一个新的对象。
可以在全局唯一性对象中通过getInstance()方法提供对该对象的返回。
3)它与构造函数不同,它可以返回类型的子类型对象。
4)代码更简洁。
class MyMap<K,V> {
public MyMap(){
}
public static <K,V> MyMap<K,V> newInstance(){
return new MyMap<K, V>();
}
}
public class Main{
public static void main(String[] args){
MyMap<String, String> map1 = new MyMap<String, String>();
//更加简洁,不需要重复指明类型参数,可以自行推导出来
MyMap<String, String> map2 = MyMap.newInstance();
}
}
使用静态工厂方法的缺点
1)如果类不含public或protect的构造方法,将不能被继承;
2)与其它普通静态方法没有区别,没有明确的标识一个静态方法用于实例化类
所以,一般一个静态工厂方法需要有详细的注释,遵守标准的命名,如使用getInstance、valueOf、newInstance等方法名;