有一个关于 AutoValue 的演示文稿(一种在 Java 中定义不可变对象的简洁方法,具有 , 等的合理默认值equals
)hashCode
:https://docs.google.com/presentation/d/14u_h-lMn7f1rXE1nDiLX0azS3IkgjGl5uxp5jGJ75RE/edit#slide=id。 g2a5e9c4a8_047
一开始,他们讨论了 AutoValue 的一些替代方案。显然,一种替代方法是手动编码的 POJO。他们警告说这个 POJO 出乎意料地难以改变。
我在这里抄录了这张幻灯片:
改变真的有那么大的风险吗?
假设一个必需的 int 字段变为可选的。你改变
int number;
到
Integer number;
测试仍然通过......一切都很好......直到有一天,放入集合中的对象开始神秘地从集合中“消失”!为什么?(留给读者作为练习。)
我无法弄清楚这个“练习”。什么样的“消失”?contains(element)
竟然是false
?size()
没有减量remove()
?iterator()
不再包含该元素?为什么会发生这些?