Metadata实现了hashCode()
,尽管它是一个可变类。hashCode()
仅存在以启用存储数据结构(如Map和Set);当存储对象的hashCode发生变化时,它们的行为会变得非常糟糕。
由于Document包含Metadata,并且根据它实现了hashCode()
;因此这个问题影响到了Document。
可能的解决方案:
- 移除两个实现;使它们成为不可哈希的类。
- 为Metadata(以及可能的Document)创建不可变版本。
- 使Metadata可冻结,并只允许在冻结的Metadata类上使用hashCode。
1条答案
按热度按时间zour9fqk1#
@crutcher 第一个选项(移除两个实现;使它们成为不可哈希的类)听起来不错,WDYT?