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

Pav*_*vel 1 java collections immutability

在"Effective Java"一书中,Joshua Bloch说:"不可能在Collection Framework中继承任何便利实现类".

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

你能不能解释一下为什么我们不能用一个不可变的类扩展一个可变类?

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

And*_*ner 7

阅读更广泛的报价:

仅提供静态工厂方法的主要缺点是没有公共或受保护构造函数的类不能被子类化.对于公共静态工厂返回的非公共类,情况也是如此.例如,无法在Collections Framework中继承任何便捷实现类.

它静下心来Collections.unmodifiableList,Collections.singleton,Collections.synchronizedMap:你不能继承由这些方法返回的类型.