有许多原因导致您可能更喜欢静态工厂方法而不是公共构造函数。您可以阅读《有效Java,第二版》中的项目1,以进行更长时间的讨论。
- 它允许方法返回的对象的类型与包含该方法的类的类型不同。实际上,返回的类型可以取决于参数。例如,
EnumSet.of(E)
如果emum类型的元素很少,而enum类型的元素很多,则将返回不同的类型( 编辑: 在这种情况下,对于enum没有很多元素的常见情况,提高了性能) - 它允许缓存。例如,如果以-128到127之间的
Integer.valueOf(x)
值多次调用同一值x
,则默认情况下将返回同一对象实例x
。 - 它允许您使用命名构造函数(如果您的类需要许多构造函数,这将很有用)。参见例如中的方法
java.util.concurrent.Executors
。 - 它使您可以创建概念上简单但实际上功能非常强大的API。例如,中的静态方法
Collections
隐藏了许多类型。取代具有的Collections
许多静态方法类,它们可能已经创建了许多公共课,但是那会是困难的人新的理解和记忆的语言。 - 对于泛型类型,它可以限制您需要进行多少次键入操作。例如,
List<String> strings = new ArrayList<String>()
您可以不用键入GuavaList<String> strings = Lists.newArrayList()
(newArrayList
方法是泛型方法,并且会推断出泛型的类型)。
对于
HashBiMap,最后一个原因是最有可能的。



