《effective java》这本书,买了有半年之久了,我也大概翻阅了一遍,说实话,没看懂,觉得这本书简直烂透了,看得我云里雾里的。后来,这本书被我束之高阁了,偶然在一篇博客上看到,至少要把《effective java》这本书看三遍,有必要的话,把里面的知识点全背下来。诧异之余,我决定重新拾起这本书,重新来解读这本书。
第一条是考虑使用静态工厂方法代替构造函数。构造函数,一般用来实例化一个类,创建一个对象;静态工厂方法同样可以实现相同的效果,而且相比较构造器有三大优势:
第一, 静态工厂方法,有名称;
public class BigInteger {
private int number;
public BigInteger(intnumber) {}
}
例如,通过构造器BigInteger bigInteger = new BigInteger(number),创建了一个带整型形参的BigInteger的对象,如果,认为该对象返回是素数,没有名称,并不能从该构造器看出创建出来是素数的BigIngeger。通过静态工厂方法,
public class BigInteger {
private int number;
private String str;
public static BigIntegerprime(int number) {}
}
通过BigInteger.prime(number),很显然的看出返回对象的特性,可读性强。
第二,不必每次调用静态工厂方法的时候都创建一个新的对象。这个很好理解,因为有static这个关键字在,类方法属于类,所以可以重复利用已经创建好的对象。
第三,返回原返回类型的任何子类型的对象,灵活性强。这句话读起来很拗口。只要返回的对象是原类型的子类,该对象可以是非共有的。静态工厂返回的对象所属的类,在编写包含该静态工厂方法的类是可以是不必存在的。