java - 如何确定我是否已在 super.equals 调用链中到达对象?

标签 java equals superclass

我对 Class.getSuperclass() 有疑问。我想生成一个类层次结构,其中每个子类在将其属性与另一个类进行比较后,将 equals 请求传递给父类。使用这种方法,当我达到 Object 之上的级别时,我需要停止调用 super.equals,因为 Object 进行了 isSame 比较,而这不是我想要的。

假设我有这个层次结构:

class Child extends Parent {
    ...
    public boolean equals(Object other) {
        ... compare my attributes to other, if everything matches:
        if (myImmediateSuperIsObject()) {
           return true;
        } else {
           return super.equals(other)
        }
    }
}



class Parent extends Object {
    public boolean equals(Object other) {
        ... compare my attributes to other, if everything matches:
        if (myImmediateSuperIsObject()) {
           return true;
        } else {
           return super.equals(other)
        }
    }
}

问题是 myImmediateSuperIsObject 伪调用。怎么写呢? 当从 Child.equals 调用 Parent.equals 时,那么在 Parent 中,this.getClass().getSuperclass() 不是 Object,而是 Parent。那是因为在调用 getSuperclass() 时,我们总是从实例的类开始,即 Child。因此,我可以通过递归调用 getSuperclass 直到我得到 null 来构建整个层次结构,但是我如何确定我是否正好在我的等价链调用中的 Object 之上?

重申一下,所有这些只是一个问题,因为我需要生成类层次结构。如果我手动编写此代码,我当然会知道我正在扩展对象并停止调用 super.equals()。

有什么想法吗?

最好的问候, 迪特里希

最佳答案

由于您要比较对象层次结构中的属性,您是否考虑过使用 EqualsBuilder.reflectionEquals来自 Commons Lang

关于java - 如何确定我是否已在 super.equals 调用链中到达对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596554/

相关文章:

java - 使用 NetBeans 检查实时 Java 对象?

java - 如何使用 Hibernate 自动释放游标?

java - HashSet 包含重复条目

css - 侧边栏的高度等于主要内容

constructor - 将强制数据传递给 Kotlin 中的父类(super class)

java - 为什么java.nio.files.Path中没有Path构造函数?

java - 我应该在 JPA 实体中编写 equals() 和 hashCode() 方法吗?

java - 如何使用相同的父类(super class)方法初始化不同的子类类型?

ios loadNibNamed 到父类(super class)

java - JSTL - 比较字符串