In" Effective Java"约书亚布洛赫(Joshua Bloch)写道:"不可能在集合框架中继承任何便利实现类"。
如果ArrayList,LinkedList,HashSet等具有公共构造函数并且可以轻松地进行子类化,他为什么要指出它呢?
请您解释一下为什么我们不能通过不可变类来扩展可变类?
如果不可变类具有package-private构造函数和字段,并且可以由可变子类修改,那么将仅为子类创建不可变的INSTANCE,并且用户将不使用父类。
答案 0 :(得分:7)
阅读更广泛的引语:
仅提供静态工厂方法的主要缺点是 没有公共或受保护构造函数的类不能被子类化。该 对于公共静态工厂返回的非公共类也是如此。例如, 不可能在子类中继承任何便利实现类 馆藏框架。
它讨论Collections.unmodifiableList
,Collections.singleton
,Collections.synchronizedMap
之类的内容:您不能对这些方法返回的类型进行子类化。