静态工厂方法而不是构造函数

Static factory methods instead of constructors

我在阅读 Joshua Block 的 Effective Java 书第 1 项后一直在研究这个问题,该书关于使用工厂静态方法而不是构造函数。在文本中,他尽可能地捍卫这种使用,并在其他理由中引用了实施 SingletonFlyweight 标准的可能性。它还引用了Booleanclass的案例,通过valueOf (boolean)方法巧妙地使用了享元

public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

我的问题是:我了解使用这些模式的优点,但无法在构造函数本身中实现?单独使用它们并不能证明创建静态工厂方法是合理的。

but could not be implemented in the constructor itself?

否:new,根据规范,总是创建一个新实例(或失败),所以new Boolean(b)总是return一个Boolean 的新实例。

Boolean.valueOf returns 一个预先存在的实例。这是可取的,因为只有两个可能的值,所以创建更多值根本没有意义。