使用instanceof的数组元素

时间:2014-06-30 13:08:28

标签: java arrays instanceof

是否可以在两个不同的数组中使用带有两个元素的instanceof?

例如:if(arrayA[c] instanceof arrayB[c]){}

我已经尝试了上面的代码但是出现了以下错误:

error: ']' expected: if(arrayA[c] instanceof arrayB[c]){}
                                                    ^
error: ';' expected: if(arrayA[c] instanceof arrayB[c]){}
                                                     ^
error: illegal start of expression: if(arrayA[c] instanceof arrayB[c]){}
                                                                     ^

5 个答案:

答案 0 :(得分:4)

您可以使用Class.isAssignableFrom()

来自javadoc:

  

确定此Class对象所表示的类或接口   与...相同或者是超类或超级接口   由指定的Class参数表示的类或接口。

答案 1 :(得分:3)

当您使用instanceof时,您需要知道" B"在编译时,如果元素包含类名,那么你可以使用它,否则

另外要添加instanceof只能用于引用类型,而不是基本类型

答案 2 :(得分:2)

您可以尝试以下操作:

Class cA=arrayA[c].getClass();
Class cB=arrayB[c].getClass();
if (cA.isAssignableFrom(cB) {
   .... your code Here
}

这样,您将使用Reflection API动态加载数组中对象的类,并验证arrayA中的对象是否是arrayB中的实例(作为直接实例或子类)。 / p>

答案 3 :(得分:1)

如果您希望相应的元素具有完全相同的类型,则以下内容就足够了。

    if (arrayA[c].getClass() == arrayB[c].getClass()) {}

(请注意,==equalsClass个对象相同。)

如果可以接受子类型,请改用Class.isAssignableFrom(Class)方法。请注意,此方法是不对称的:

  

c1.isAssignableFrom(c2)并不意味着c2.isAssignableFrom(c1)


  

是否可以在两个不同的数组中使用带有两个元素的instanceof?

没有。 Java语言不允许它。

instanceof运算符针对类型测试对象,右手操作数必须是TypeReference;即类型或类型变量。它不能是普通的变量或表达;他们在那个位置语法上无效。

答案 4 :(得分:1)

您可以使用Class#isInstance

if (arrayB[c].getClass().isInstance(arrayA[c])){
    // do something
}