Java 使用带有instanceof的数组元素
可以将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
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
}