26

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

前もって感謝します!

4

6 に答える 6

49

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

于 2010-04-23T15:26:35.457 に答える
35

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

于 2010-04-23T15:33:35.017 に答える
10

本当に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
}
于 2010-04-23T15:37:56.017 に答える
3

あなたは見たいかもしれませんsomeObject.getClass().isAssignableFrom(otherObject.getClass());

于 2010-04-23T15:29:35.003 に答える
1

Java には、サブクラスをチェックするための直接的な方法はありません。 instanceof Eventすべてのサブクラス オブジェクトに対して true を返します

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

于 2010-04-23T15:27:57.417 に答える
0

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

于 2010-04-23T15:27:44.570 に答える