如何将变量参数传递给 instanceof?
How do I pass a variable argument to instanceof?
我正在寻找一种将参数 c 传递给 instanceof 的方法,因为我需要像代码中所示那样遍历一个数组,但是编译器 returns 错误 "unknown class c" 怎么办我解决这个问题?
Class0 a = new Class0();
boolean bool;
Class[] array = new Class[]{Class0.class, Class1.class};
for(Class c : array){
if(a instanceof c)
bool = true;
else
bool = false;
}
我知道我可以使用 a.getClass().getSimpleName() 并检查它是否等于字符串数组中的一个元素,但我想更好地理解如何使用关键字 instanceof 和它是如何工作的。
你不需要 - instanceof
运算符 总是将类型的名称作为其第二个操作数。但是,您可以使用 Class.isInstance
方法 代替:
bool = c.isInstance(a);
注意缺少 if/else - 任何时候你有 if (condition) return true; else return false;
或类似的东西,你可以折叠它。但是,在您当前的代码中,循环后 bool
的值将仅取决于数组的 last 元素,因为您在每次迭代时都会重新分配它。
您可能实际上想要:
boolean bool = false;
for (Class c : array){
if (c.isInstance(a))
bool = true;
}
}
(对于 Java 8,您可以使用流和 anyMatch
来做到这一点,但这是另一回事。)
我正在寻找一种将参数 c 传递给 instanceof 的方法,因为我需要像代码中所示那样遍历一个数组,但是编译器 returns 错误 "unknown class c" 怎么办我解决这个问题?
Class0 a = new Class0();
boolean bool;
Class[] array = new Class[]{Class0.class, Class1.class};
for(Class c : array){
if(a instanceof c)
bool = true;
else
bool = false;
}
我知道我可以使用 a.getClass().getSimpleName() 并检查它是否等于字符串数组中的一个元素,但我想更好地理解如何使用关键字 instanceof 和它是如何工作的。
你不需要 - instanceof
运算符 总是将类型的名称作为其第二个操作数。但是,您可以使用 Class.isInstance
方法 代替:
bool = c.isInstance(a);
注意缺少 if/else - 任何时候你有 if (condition) return true; else return false;
或类似的东西,你可以折叠它。但是,在您当前的代码中,循环后 bool
的值将仅取决于数组的 last 元素,因为您在每次迭代时都会重新分配它。
您可能实际上想要:
boolean bool = false;
for (Class c : array){
if (c.isInstance(a))
bool = true;
}
}
(对于 Java 8,您可以使用流和 anyMatch
来做到这一点,但这是另一回事。)