Class.getSuperclass()に問題があります。各子がその属性を他のクラスと比較した後、equalsリクエストを親に渡すクラスの階層を生成したいと思います。このアプローチでは、ObjectがisSame比較を行うため、Objectの上のレベルに達したときに、super.equalsの呼び出しを停止する必要があります。これは、私が望んでいることではありません。
私がこの階層を持っていると仮定します:
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疑似呼び出しです。書き方は?Parent.equalsがChild.equalsから呼び出されると、Parent内では、this.getClass()。getSuperclass()はObjectではなく、Parentになります。これは、getSuperclass()を呼び出すときは、常にインスタンスのクラスである子から開始するためです。したがって、nullになるまでgetSuperclassを再帰的に呼び出すことで階層全体を構築できますが、equals呼び出しのチェーンでObjectのすぐ上にあるかどうかを判断するにはどうすればよいですか?
繰り返しになりますが、クラス階層を生成する必要があるため、これはすべて問題にすぎません。これを手動で記述した場合、もちろん、オブジェクトを拡張していることを認識し、super.equals()の呼び出しを停止します。
何か案が?
よろしく、ディートリッヒ