Equals()メソッドをオーバーライドし、オブジェクトがイベントのサブクラスのインスタンスであるかどうかを知る必要があります(イベントはスーパークラスです)。 「objsubclassofEvent」のようなものが欲しいです。どうすればこれを作ることができますか?
前もって感謝します!
instanceof
はそれをうまく処理できます。
次のコードを使用すると、オブジェクトがEventを拡張するクラスであるが、Eventクラスインスタンス自体ではないかどうかを確認できます。
if(myObject instanceof Event && myObject.getClass() != Event.class) {
// then I'm an instance of a subclass of Event, but not Event itself
}
デフォルトでは、instanceof
は、オブジェクトが指定されたクラスであるか、イベントの任意のレベルのサブクラス(拡張または実装)であるかを確認します。
本当にinstanceof
で十分なはずですが、クラスが本当にサブクラスであることを確認したい場合は、次の方法でチェックを提供できます。
if (object instanceof Event && object.getClass() != Event.class) {
// is a sub-class only
}
エイドリアンは私より少し先だったので、汎用的な方法でこれを行う方法も追加します。
public static boolean isSubClassOnly(Class clazz, Object o) {
return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz;
}
これを使用する:
if (isSubClassOnly(Event.class, object)) {
// Sub-class only
}
someObject.getClass().isAssignableFrom(otherObject.getClass());
を見たいと思うかもしれません
Javaにサブクラスをチェックする直接メソッドはありません。_instanceof Event
_はサブクラスオブジェクトに対してtrueを返します。
オブジェクトに対してgetClass()
を実行してから、Class
オブジェクトに対してgetSuperclass()
メソッドを使用して、スーパークラスがEvent
であるかどうかを確認できます。
ObjがEventのサブクラスである場合、それはinstanceofです。 objは、派生元のすべてのクラス/インターフェースのインスタンスです。したがって、少なくともすべてのオブジェクトはObjectのインスタンスです。