web-dev-qa-db-ja.com

Java-instanceofのような「subclassof」はありますか?

Equals()メソッドをオーバーライドし、オブジェクトがイベントのサブクラスのインスタンスであるかどうかを知る必要があります(イベントはスーパークラスです)。 「objsubclassofEvent」のようなものが欲しいです。どうすればこれを作ることができますか?

前もって感謝します!

23
msr

instanceofはそれをうまく処理できます。

44
Ken Bloom

次のコードを使用すると、オブジェクトが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は、オブジェクトが指定されたクラスであるか、イベントの任意のレベルのサブクラス(拡張または実装)であるかを確認します。

34
Adrian

本当に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
}
10
Kevin Brock

someObject.getClass().isAssignableFrom(otherObject.getClass());を見たいと思うかもしれません

3
z5h

Javaにサブクラスをチェックする直接メソッドはありません。_instanceof Event_はサブクラスオブジェクトに対してtrueを返します。

オブジェクトに対してgetClass()を実行してから、Classオブジェクトに対してgetSuperclass()メソッドを使用して、スーパークラスがEventであるかどうかを確認できます。

1
Fazal

ObjがEventのサブクラスである場合、それはinstanceofです。 objは、派生元のすべてのクラス/インターフェースのインスタンスです。したがって、少なくともすべてのオブジェクトはObjectのインスタンスです。

0
DaveJohnston