gpt4 book ai didi

java - 首选 Equals() 方法实现

转载 作者:搜寻专家 更新时间:2023-11-01 04:03:18 29 4
gpt4 key购买 nike

这是一个关于当我需要在列表中查找对象实例时如何实现 equals 方法的问题,该实例的值是我在其成员中拥有的实例之一。

我有一个实现了 equals 的对象:

class User {

private String id;

public User(id) {
this.id = id;
}

public boolean equals(Object obj) {
if (!(obj instanceof User)) {
return false;
}
return ((User)obj).id.equals(this.id);
}
}

现在如果我想在列表中找到一些东西,我会做这样的事情:

public function userExists(String id) {
List<Users> users = getAllUsers();
return users.contains(new User(id));
}

但这也许是更好的实现方式?

class User {

private String id;

public boolean equals(Object obj) {
if (!(obj instanceof User)) {
return false;
}
if (obj instanceof String) {
return ((String)obj).equals(this.id);
}
return ((User)obj).id.equals(this.id);
}
}

用这个代替:

public function userExists(String id) {
List<Users> users = getAllUsers();
return users.contains(id);
}

最佳答案

用第二种方法是危险的,因为它破坏了等式的对称属性。

Java 期望 equals() 的实现是自反的、对称的和可传递的。第二种实现打破了对称性:如果将 User 与表示其 ID 的 String 进行比较,您将得到 true,但如果将字符串与用户,你会得到一个false

关于java - 首选 Equals() 方法实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10017689/

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