equals() メソッドをオーバーライドしていますが、オブジェクトがイベントのサブクラスのインスタンスであるかどうかを知る必要があります (イベントはスーパークラスです)。「obj subclassof Event」のようなものが欲しいです。これはどのように作ることができますか?
前もって感謝します!
equals() メソッドをオーバーライドしていますが、オブジェクトがイベントのサブクラスのインスタンスであるかどうかを知る必要があります (イベントはスーパークラスです)。「obj subclassof Event」のようなものが欲しいです。これはどのように作ることができますか?
前もって感謝します!
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
では、オブジェクトが Event の任意のレベルで指定されたクラスまたはサブクラス (拡張または実装) であるかどうかをチェックします。
本当に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()
使用して、スーパークラスが であるかどうかを確認できます。getSuperclass()
Class
Event
obj が Event のサブクラスである場合、それは instanceof です。obj は、派生元のすべてのクラス/インターフェースのインスタンスです。したがって、少なくともすべてのオブジェクトは Object のインスタンスです。