如何在运行时检查子类是否是类的实例?

2022-08-31 12:57:36

在Android应用程序测试套件中,我有一个这样的类,其中有一个视图:B

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

现在我有一个视图对象列表,其中可能包含对象,但在这种情况下,我只关心它们是子类还是“实例”。我想做这样的事情:AB

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
    }
}

问题是,当遇到一个对象时,它不会计算为“实例”。有没有办法做或什么?ifABisSubclassOf


答案 1

您必须仔细阅读 API 才能使用此方法。有时你很容易感到困惑。

它是:

if (B.class.isInstance(view))

API 说:确定指定的 Object(参数)是否与该类所表示的对象(您正在调用方法的类对象)的赋值兼容

艺术

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

API 说明:确定此 Class 对象表示的类或接口是否与指定 Class 参数表示的类或接口相同,或者是否是其超类或超接口

或(没有反射和推荐的):

if (view instanceof B)

答案 2
if(view instanceof B)

如果视图是 B 或子类 A(或 B 的任何子类)的实例,则此值将返回 true。