Effective Java 第 1 条:考虑用静态工厂方法代替构造器
静态工厂方法相比构造器,优势有以下几个:
- 静态工厂方法有名称,能更确切地描述正被返回的对象,更易于阅读。构造器方法名称都是固定的,只能通过改变参数列表来构造不同对象。
- 不必在每次调用时都创建一个对象,可以先将对象缓存起来,需要时直接返回,避免创建不必要的重复对象。比较时可以直接用
==
操作符。 - 可以返回原返回类型的任何子类对象,更加灵活。适用于基于接口的框架。
- 在创建参数化实例时,代码更加简洁。
不需要接连两次提供类型参数:
Map<String, List<String>> m = new HashMap<String, List<String>>();
只需要提供一个静态工厂方法:
public static <K, V> Hash<K, V> newInstance() {
return new HashMap<K, V>;
}
Map<String, List<String>> m = HashMap.newInstance();
但是,静态工厂方法也有一些缺点:
- 类如果只包含私有构造器,那么就不能被子例化(继承)。但这样也许也会因祸得福,因为它鼓励使用复合,而不是继承;
- 静态工厂方法与其它静态方法没什么区别,无法像构造器一样在 API 文档中明确标识出来。但是,静态工厂方法有一些惯用名称,如
valueOf
,of
,getInstance
,newInstance
...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论