1. ホーム
  2. java

サブクラスがクラスのインスタンスであるかどうかを実行時に確認する方法は?[重複しています]。

2023-09-22 13:34:48

質問

アンドロイドアプリのテストスイートで、このようなクラスがあります。 B はビューです。

public class A extends B {
... etc...
}

これで、ビューオブジェクトのリストができあがりました。 A オブジェクトを含むかもしれませんが、この場合、サブクラスか "instances of" かだけを気にしています。 B . というようなことをしたいのです。

ArrayList<View> viewList = getViews();
Iterator<View> iterator = viewList.iterator();
while (iterator.hasNext() && viewList != null) {
    View view = iterator.next();
    if (view.getClass().isInstance(B.class)) {
        // this is an instance of B
    }
}

問題は if に遭遇したときに A のインスタンスとは評価されません。 B と評価されません。どうにかして isSubclassOf などにする方法はありますか?

どのように解決するのですか?

このメソッドについては、APIをよく読む必要があります。すぐに混乱してしまうことがあります。

どちらかです。

if (B.class.isInstance(view))

APIによると が、その 指定されたオブジェクト (パラメータ) で表されるオブジェクトと代入互換性があります。 このクラス (メソッドを呼び出す先のクラスオブジェクト)

または

if (B.class.isAssignableFrom(view.getClass()))

APIによると この クラスオブジェクト で表されるクラスやインターフェースが、そのクラスやインターフェースと同じか、スーパークラスかスーパーインターフェースであるかどうかを判定します。 指定されたクラス・パラメータ

または(リフレクションなしで、推奨されるもの)。

if (view instanceof B)