gpt4 book ai didi

java - Eclipse 默认 equals() 实现的问题

转载 作者:行者123 更新时间:2023-12-02 01:31:49 26 4
gpt4 key购买 nike

我在使用 Eclipse 生成的 equals 方法时遇到一些问题。

假设我有一个具有属性 entityIdname 的实体 Bean,但我只是为 equals 生成选择了 entityId 属性。所以,eclipse生成的代码如下:

    @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entity other = (Entity) obj;
if (entityId == null) {
if (other.entityId != null)
return false;
} else if (!entityId.equals(other.entityId))
return false;
return true;
}

问题在于,当比较以 null 作为实体 ID 的 Entity 类的两个不同实例时,equals 方法返回 true。

对我来说,这个 equals 实现是不正确的(至少在与 JPA 一起使用时),因为没有 entityId 的两个实体只是正在运行的对象(可能是)作为新对象保存在数据库中。如果我将这两个对象添加到一个 Set 中(例如,一对多关系),则在两次插入之后,Set 将只有一个元素(Set 不允许重复)。

那么,问题是为什么 Eclipse 会生成这样的 equals 方法呢?您认为使用以下代码实现 equals 方法更好吗?

    @Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Entity other = (Entity) obj;
if (entityId == null) {
if (other.entityId != null)
return false;
else
return true;
} else if (!entityId.equals(other.entityId))
return false;
return true;
}

最佳答案

Eclipse 根本不知道您将如何使用您的类。

通常,如果字段具有相等的值,则对象被视为相等

class Human {
String name;
String petName;
}

Human("Bob", null) 等于 Human("Bob", null)

您的情况比较特殊,需要您自行调整。

关于java - Eclipse 默认 equals() 实现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55914325/

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