【发布时间】:2018-02-10 01:05:21
【问题描述】:
在“Effective Java”一书中,Joshua Bloch 说:“不可能在 Collection Framework 中对任何便利实现类进行子类化”。
如果ArrayList、LinkedList、HashSet等有公共构造函数并且可以很容易地被子类化,他为什么要指出呢?
能否请您解释一下为什么我们不能通过不可变类扩展可变类?
如果不可变类具有包私有构造函数和字段并且可以由可变子类修改,则不可变的实例将仅为子类创建,用户将不会使用父类。
【问题讨论】:
-
他不谈论
LinkedList。他谈到了java.util.Collections$SingletonSet和java.util.Arrays$ArrayList。 -
他的意思可能是说“使用工厂方法时”跨度>
-
我也不明白您所说的“我们不能用不可变的类扩展可变类”是什么意思。这对你来说代表着什么?扩展可变类并覆盖所有突变方法以引发异常绝对是可能的。
-
我问的是如何通过一个可变的来扩展一个不可变的类,因为我起初认为我们不能仅仅因为它们是不可变的而扩展集合。
标签: java collections immutability