读书笔记-Effective Java(原书第3版)
第二章 创建和销毁对象
第1条: 用静态工厂方法代替构造器
优势
- 静态工厂方法与构造器不同的第一大优势在于,它们有名称.
- 静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象.
- 静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象.
- 静态工厂方法的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值.
- 静态工厂方法的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在.
缺点
-
静态工厂方法的主要缺点在于,类如果不含公有的或者受保护的构造器,就不能被子类化.
-
静态工厂方法的第二个缺点在于,程序员很难发现它们.
-
一些惯用的名称
-
from
: 类型转换方法,它只有单个参数,返回该类型的一个相对应的实例1
Date d = Date.from(instant);
-
of
: 聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来.1
Set<Rank> faceCards = EnumSet.of(JACK,QUEEN,KING);
-
valueOf
: 比from
和of
更繁琐的一种替代方法1
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
-
instance
或者getInstance
: 返回的实例是通过方法的(如有)参数来描述的,但是不能说与参数具有同样的值.1
StackWalker luke = StackWalker.getInstance(options);
-
create
或者newInstance
像instance
或者getInstance
一样,但create
或者newInstance
能够确保每次调用都返回一个新的实例1
Object newArray = Array.newInstance(classObject,arrayLen);
-
getType
: 像getInstance
一样,但是在工厂方法处于不同的类的时候使用.Type
表示工厂方法所返回的对象类型.1
FileStore fs = Files.getFileStore(path);
-
newType
: 像newInstance
,但是在工厂方法处于不同类中时候使用,Type
表示工厂方法所返回的对象类型.1
BufferedReader br = Files.newBufferedReader(path);
-
type
:getType
和newType
的简版1
List<Complaint> litany = Collections.list(legacyLitany);
-
-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!