如果不使用instanceof,相当于什么?使用true,false或else语句时可能更简单一些吗?
public static void p (Object...ar)
{
for (int i=0; i < ar.length; i++)
{
if (ar[i] instanceof int[])
{
答案 0 :(得分:3)
对于原始数组,您可以代替:
if (ar[i] instanceof int[])
使用:
if (ar[i].getClass() == int[].class)
注意:强>
上面的代码适用于基本类型的数组。但请注意,instanceof
还会检查左侧部分中的对象是否是右侧部分中的类的子类型,而==
则不是。(myInstance instanceof MyClass[])
。
对于对象,相当于( MyClass[].class.isAssignableFrom( myInstance.getClass() ) )
(检查子类型)是:
{{1}}
答案 1 :(得分:1)
您可以使用:
(getClass().isArray())
并检查是否为整数数组:
ar.getClass().toString().equals("class [I")
<强>更新强>:
if(ar.getClass().isArray()) {
if(ar[i].getClass() == int[].class)
....
else if(ar[i].getClass() == String[].class)
....
}
答案 2 :(得分:1)
另一种选择是假设它是int[]
,如果不是,则捕获结果异常:
public static void p (Object...ar)
{
for (int i=0; i < ar.length; i++)
{
int[] i_arr;
try {
i_arr = (int[]) ar[i];
} catch (ClassCastException e) {
continue;
}
//...
答案 3 :(得分:0)
通常,继承和多态性是解决问题的更好方法。不是检查你正在处理什么类型的对象,而是从泛型类继承几个类,并调用共享方法。
答案 4 :(得分:0)
查看java.lang.Class,它有一个方法isAssignableFrom(Class<?> cls)
对于数组的具体示例,它还有isArray()
和getComponentType()
答案 5 :(得分:0)
Class<?> intArrayCls = int[].class;
...
if (intArrayCls.isInstance(ar[i])) {
也可以做到这一点。
JavaDoc of isInstance。它更灵活,因为它不仅仅像接受的答案一样测试平等。
答案 6 :(得分:0)
使用isAssignableFrom
public static void test(Object... args) {
for (int i = 0; i < args.length; i++) {
if (args[i].getClass().isAssignableFrom(int[].class)) {
System.out.println("true");
} else {
System.out.println("false");
}
}
}
您也可以动态使用isAssignableFrom,请参阅此帖子以了解instanceof和isAssignableFrom之间的区别 What is the difference between instanceof and Class.isAssignableFrom(...)?