gpt4 book ai didi

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

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

我对 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/

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