【问题标题】:Java toEquals() Override to include parent class attributesJava toEquals() 覆盖以包含父类属性
【发布时间】:2021-07-01 01:07:26
【问题描述】:

我正在尝试覆盖 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
}

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

【问题讨论】:

  • 你应该在super.equals(...)中传递o而不是obj.super()
  • 从语法上看,您的代码似乎有问题,请根据上述评论调整更改
  • 您可以使用 IDE 生成 equals(和 hashCode)方法。他们为此提供了众所周知且经过测试的模板。
  • 不要在继承类的同时编写遵循equals协定的equals方法。应改为使用合成。

标签: java equals equality


【解决方案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);
}

P.S.如果你使用IDEA之类的IDE,你可以自动生成equals()hashCode()。作为另一种选择,您可以使用Project Lombok

【讨论】:

  • 这不会将“this”对象的父类与“that”对象o的子类进行比较吗?
  • 我将 IDE 的 generate 函数用于 equals 和 hashCode 方法。但是 equals 只比较属于子类的属性,而不比较它的抽象父类
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
相关资源
最近更新 更多