gpt4 book ai didi

java - 为什么将字段从 int 更改为 Integer 会导致对象从 Set 中消失?

转载 作者:行者123 更新时间:2023-11-29 04:23:18 25 4
gpt4 key购买 nike

有一个关于 AutoValue 的介绍(一种在 Java 中定义不可变对象(immutable对象)的简洁方法,对 equalshashCode 等具有合理的默认值):https://docs.google.com/presentation/d/14u_h-lMn7f1rXE1nDiLX0azS3IkgjGl5uxp5jGJ75RE/edit#slide=id.g2a5e9c4a8_047

一开始,他们讨论了 AutoValue 的一些替代方案。显然,一种替代方法是手动编码的 POJO。他们警告说这个 POJO 出乎意料地难以更改。

我已经在此处转录了幻灯片:

Are changes really that risky?

Suppose a required int field becomes optional. You change

int number;

to

Integer number;

Tests still pass... and everything's fine... until one day, objects put into Sets start mysteriously "disappearing" from the set! Why? (Left as an exercise to the reader.)

我想不通这个“练习”。什么样的“消失”? contains(element) 意外地是 falsesize() 在没有 remove() 的情况下递减? iterator() 不再包含该元素?为什么这些都会发生?

最佳答案

AFAIK 会破坏的主要是 equals,因为 this.number == obj.numbernumber 是一个整数

我认为这会影响 contains 以及 remove(两者都出乎意料地 false)。

虽然我对 Java 还是有点陌生​​,所以如果有人有其他评论或答案,我将不胜感激。大多数情况下,我不认为 sizeiterator 会受到影响,因此大概该元素仍会出现在使用 iterator 或某些的调试器中获取内容的更奇特的方式。对我来说,这听起来不像是“消失”,所以我想知道我是否遗漏了什么。

关于java - 为什么将字段从 int 更改为 Integer 会导致对象从 Set 中消失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47801048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com