gpt4 book ai didi

java - 如何重写子类的equals方法

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

我正在尝试在两个不同位置之间同步用户,因此我将现有用户保留在列表中,并以设定的时间间隔进行比较,以查看是否应该添加(新)用户或只是更新用户。

我有一个用户类,它是校长的子类。

但是我在列表中的比较不起作用;我用谷歌搜索了一下,发现你必须重写 equals 方法,我确实这样做了 - 但该代码似乎没有被执行,它进入 ArrayList.class (原始)并在那里执行 contains 方法。

这是因为我的类已经扩展了父类(super class)校长吗?如果我想执行我在 User 类中定义的 equals,我有什么选择?

public class User extends Principal
{
// some protected properties
...

@Override
public boolean equals(Object obj) {
return (this.getAlias().equals(((User) obj).getAlias())
&& this.getEmailAddress().equals(((User) obj).getEmailAddress()) && this.getCellNumber().equals(((User) obj).getCellNumber()));
}
}

Principal 类不会重写 equals 方法,更重要的是,我检查相等性的属性仅包含在子类 - User 中。因此在这里检查是有意义的。

简而言之,我有一个用户数组列表,我想检查某个用户是否已经存在。我在列表上调用比较,但它总是失败,这表明我的代码中没有正确覆盖方法 equals。有什么建议吗?

最佳答案

您不应该在父类(super class)中实现equals()(和hashcode())。

原因是当equals()返回truehashcode()必须返回same

假设您有类 Point2D 和类 Point3D 扩展了另一个类。

point2D是否应该等于具有相同区域坐标的point3D?如果是这样,那么 point3D 必须返回与“相等”point2D 相同的哈希码,这意味着您不能存储多个具有相同值的 point3d哈希基集合中的区域坐标(例如:作为 HashMap 中的键)。

关于java - 如何重写子类的equals方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43804558/

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