我对 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来构建整个层次结构,但是我如何确定我是否在我的equals调用链中的Object之上?
重申一下,这只是一个问题,因为我需要生成类层次结构。如果我要手动编写它,我当然会知道我正在扩展对象并停止调用 super.equals()。
任何的想法?
最好的问候,迪特里希