问题描述
我们可以有一个最终类的构造函数吗?我知道String类具有构造函数,但我专门查看LocalTime
包的java.time
类。它不显示任何构造函数。但是可以通过诸如LocalTime.now()
之类的静态方法来获得此类的对象。为什么我们没有像new()这样简单的构造函数。请对此加以说明。
解决方法
构造函数上有多个advantages of factory methods。
-
可读名称
-
多态(子类的任何实例都可以是 返回)
-
耦合(工厂方法提倡使用 接口,然后实施,从而产生更灵活的代码, 但构造函数会将您的代码绑定到特定的实现)
-
缓存(返回缓存的对象而不是始终创建新对象 一个)
尽管所有这些优点在这种情况下都不是有效的,但是创建多个构造函数会使用户不清楚,哪个构造函数具有哪些详细信息。可能有多个构造函数用静态工厂方法替换的情况使用户的对象构造更具可读性。用户可以通过查看名称使用正确的初始化方法。
甚至有效的Java-来自Joshua Bloch 都很好地提到了它。考虑到所有这些优点,将构造函数替换为静态初始值设定项是有效的。