Guava:为什么使用create()方法而不是构造函数?

10
请问,为什么guava的创建者更喜欢将构造函数定义为私有,并定义静态方法create()来创建对象?
1个回答

20

Effective Java第一条: 考虑使用静态工厂方法代替构造函数。

使用静态工厂方法的一些优点包括:

  • 在Java 7之前,它们可以自动推断类型参数。
  • 它们允许我们控制继承模式:我们可以在Guava中对集合类型进行子类化,而不会让外部代码对其进行子类化。
  • 它们可以返回所需类型的任意子类,从而更好地隐藏实现细节。

5
这本书的内容也可以在网上阅读,链接为:http://my.safaribooksonline.com/book/programming/java/9780137150021/creating-and-destroying-objects/ch02lev1sec1。 - Dave L.
1
我想补充一下从最终用户角度来看我认为最重要的优点:它们有一个更清晰的名称。newHashMapWithCapacity(100)new HashMap<Foo>(100)更加清晰明了。 - JB Nizet
2
@JBNizet:我们为JDK集合实现提供了这些方法,但对于我们自己开发的集合类型,通常没有比“create”更详细的工厂名称。(当然,我不确定这是否是正确的选择,正如您所描述的那样。) - Louis Wasserman
非常感谢你们的回复,现在我已经更清楚了! - Laloi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接