Java 使用带有instanceof的数组元素

Java 使用带有instanceof的数组元素,java,arrays,instanceof,Java,Arrays,Instanceof,可以将instanceof与两个不同数组中的两个元素一起使用吗 例如:if(arrayA[c]instanceof arrayB[c]){} 我尝试了上述代码,但出现以下错误: error: ']' expected: if(arrayA[c] instanceof arrayB[c]){} ^ error: ';' expected: if(arrayA[c] instanceof arra

可以将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]){}
                                                                     ^

当您使用
instanceof
时,您需要在编译时知道“B”的类,因此如果元素包含类名,则可以在其他情况下使用它

还要补充的是,
instanceof
只能与引用类型一起使用,而不能与您可以使用的基本类型一起使用

从javadoc:

确定此类对象表示的类或接口 与的超类或超接口相同,或是的超类或超接口 由指定的类参数表示的类或接口


您可以尝试以下操作:

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

通过这种方式,您将使用反射API动态加载数组中对象的类,并验证arrayA中的类是否是arrayB中的类的实例(作为直接实例或子类)。

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

    if (arrayA[c].getClass() == arrayB[c].getClass()) {}
(请注意,
=
equals
对于
对象是等效的。)

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

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


可以将instanceof与两个不同数组中的两个元素一起使用吗

不允许。Java语言不允许这样做

instanceof
操作符根据类型测试对象,右侧操作数必须是
TypeReference
;i、 e.类型或类型变量。它不能是普通变量或表达式;它们在该位置的语法无效。

您可以使用:


arrayB[c]是否包含类?否,它们包含令牌的对象。我还有几个扩展Token的类,希望确保数组的内容是同一个类的对象。您需要在instanceOf的lhs中保存一个对象,在RHS中保存一个类。一个问题:arrayA被认为是引用类型吗?
if (arrayB[c].getClass().isInstance(arrayA[c])){
    // do something
}