Collections
类具有许多静态帮助器方法,以提供各种集合类型的只读 View ,例如unmodifiableSet()
,unmodifiableList()
等。对于这些 View 对象,hashCode()
和equals()
方法将调用转发给基础集合。奇怪的异常(exception):unmodifiableCollection()
。
JavaDoc explicitly states:
我的问题:wtf在说什么?如果支持集合是集合或列表,则希望行为与unmodifiableSet()
和unmodifiableList()
一致。那将如何违反hashCode/equals契约(Contract)?
最佳答案
从JavaDoc for Collection中:
UnmodifiableList
是UnmodifiableCollection
,但反之则不一样-包裹UnmodifiableCollection
的List
不是UnmodifiableList
。因此,如果将包装列表UnmodifiableCollection
的a
与包装相同的列表UnmodifiableList
的a
进行比较,则两个包装器不应相等。如果您只是传递到包装列表,它们将相等。