当前位置: 首页 > 面试题库 >

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

慕嘉运
2023-03-14
问题内容

在android app测试套件中,我有一个类似这样的类,其中B一个视图是:

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

现在,我有一个视图对象列表,其中可能包含A对象,但是在这种情况下,我只关心它们是子类还是“实例” 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说:确定 指定的Object (参数) 是否与 此类 表示的对象 (在您要在其上调用方法的类对象 赋值兼容。 __

要么:

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

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

或(不带反射,推荐一个):

if (view instanceof B)


 类似资料:
  • 问题内容: 假设我有一个西服套装和四个西服套装子类别:Heart,Spade,Diamond和Club。 我有一个方法,该方法接收西装作为参数,这是一个类对象,而不是实例。更准确地说,它可能仅接收以下四个值之一:Heart,Spade,Diamond,Club。我该如何做出保证这种事情的断言?就像是: 我正在使用Python 3。 问题答案: 您可以使用像这样。

  • 对于这个示例: null 是否有类似这样的语句用于此检查?或者我应该使用

  • 问题内容: 我目前正在处理我的付费应用程序中的特定问题。内部包含许可检查。黑客通过修改应用apk / jar对该应用进行了修补。他们正在添加一个新类,以帮助绕过许可检查。 我的目标是以某种方式检查此特定补丁。如果找到它,我知道我的应用程序已被盗用。 关于如何知道包装上的某些东西有任何提示吗? 在我看来,对应用程序进行哈希处理并不是一个真正的选择。 我认为也许检查此类是否存在会有所帮助,但是如果他们

  • 对于此示例: 如何检查 是否是 Foo 的实例(但不是其 foo 子类的实例)?那是: checkInstance(qux,Foo.class)=true checkInstance(qux,Bar.class)=false 有没有类似于< code>instanceof的语句来进行这种检查?或者我应该使用< code>qux.getClass()。equals(Foo.class)

  • 问题内容: 我想知道如何检查变量是否是类(不是实例!)。 我试图使用该函数来执行此操作,但我不知道类将具有哪种类型。 例如,在以下代码中 我试图用 ??? 代替“ ” ,但我意识到这是python中的关键字。 问题答案: 更好的是:使用该功能。

  • 问题内容: 如何检查Java中是否存在类的方法?将一个声明是好的做法呢? 问题答案: 我假设您要检查该方法。 您可以尝试以下方法: 这将不起作用,因为该方法将在编译时解决。 您确实需要使用反射。而且,如果您可以访问要调用的方法的源代码,则最好使用要调用的方法创建一个接口。 [更新]附加信息是:有一个接口可能存在两个版本,一个是旧版本(不包含所需方法),一个是新版本(具有所需方法)。基于此,我提出以