gpt4 book ai didi

java - equals() 仅依赖于 ID 是否合适?

转载 作者:IT老高 更新时间:2023-10-28 20:23:47 24 4
gpt4 key购买 nike

假设我有类 User:

public class User {
private Long id;
private String name;
private Integer age;
private BigDecimal account;
// other fields, getters and setters
}

如下重写equals方法合适吗?

@Override
public boolean equals(Object ob) {
if (ob == null) {
return false;
}
if (this == ob) {
return true;
}
if (ob instanceof User) {
User other = (User) ob;
return this.id.equals(other.getId());
}
return false;
}

事实证明,一个对象的唯一性仅由其 ID 决定。但在我的应用程序中,id 始终是唯一的。它在数据库中提供。我的 equals 实现是否足以解决这个问题?或者这不是最佳做法?

当然我知道在这种情况下 hashCode 实现应该如下:

@Override
public int hashCode() {
return id.intValue();
}

最佳答案

您是否应该这样做取决于您的类的语义。也就是说,说你的类的两个对象是等价的是什么意思?

最重要的区别在于具有值语义的对象和具有实体语义的对象。实体对象不是等价的,即使它们具有等价的属性(颜色、长度等)。在许多情况下,包括从具有主键的数据库表中读取对象时,实体对象将具有唯一的 ID 字段。在这种情况下只比较 ID 字段是正确的做法。

关于java - equals() 仅依赖于 ID 是否合适?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003427/

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