为什么Bloch声明不可能将集合实现子类化?

时间:2018-02-09 16:57:07

标签: java collections immutability

In" Effective Java"约书亚布洛赫(Joshua Bloch)写道:"不可能在集合框架中继承任何便利实现类"。

如果ArrayList,LinkedList,HashSet等具有公共构造函数并且可以轻松地进行子类化,他为什么要指出它呢?

请您解释一下为什么我们不能通过不可变类来扩展可变类?

如果不可变类具有package-private构造函数和字段,并且可以由可变子类修改,那么将仅为子类创建不可变的INSTANCE,并且用户将不使用父类。

1 个答案:

答案 0 :(得分:7)

阅读更广泛的引语:

  

仅提供静态工厂方法的主要缺点是   没有公共或受保护构造函数的类不能被子类化。该   对于公共静态工厂返回的非公共类也是如此。例如,   不可能在子类中继承任何便利实现类   馆藏框架。

它讨论Collections.unmodifiableListCollections.singletonCollections.synchronizedMap之类的内容:您不能对这些方法返回的类型进行子类化。