Java toEquals() 覆盖以包含父类属性

Java toEquals() Override to include parent class attributes

提问人:AKJ 提问时间:4/5/2021 最后编辑:AKJ 更新时间:4/5/2021 访问量:449

问:

我正在尝试覆盖 pojo 的 toEquals 方法。但是,我不确定如何比较父类属性,因为 super() 向我抛出了一个错误。

我正在尝试这样的事情:

@Override 
public boolean equals(Object o) {
  return super.equals(o.super()); // it mentions that the abstract parent class is not an inner class
}

如何比较父抽象类字段是否相等?子属性可能相似,但父属性始终不同。

Java 等于 平等

评论

6赞 Viral Lalakia 4/5/2021
您应该传递而不是 in 。oobj.super()super.equals(...)
0赞 Raushan Kumar 4/5/2021
从语法上讲,您的代码似乎有问题,请根据上述评论进行调整
0赞 polypiel 4/5/2021
您可以使用 IDE 生成 equals(和 hashCode)方法。他们为此提供了众所周知且经过测试的模板。
0赞 Prashant Pandey 4/5/2021
不要说在从类继承时不可能编写遵循 equals 协定的 equals 方法。应改用组合物。

答:

0赞 Oleg Cherednik 4/5/2021 #1
@Override 
public boolean equals(Object o) {
  // compare local fields and return false if some of them are not equal
  
  // if all fields are equal in the current class, then delegate work to the parent class.
  // You should not care what it does, just call it and retrieve the result
  return super.equals(o);
}

附言如果使用像 IDEA 这样的 IDE,则可以自动生成 equals()hashCode()。作为另一种选择,您可以使用 Project Lombok

评论

0赞 AKJ 4/5/2021
这难道不是将“this”对象的父类与“that”对象o的子类进行比较吗?
0赞 AKJ 4/5/2021
我将 IDE 的 generate 函数用于 equals 和 hashCode 方法。但是,equals 只比较属于子类的属性,而不比较属于其抽象父类的属性