如何将变量参数传递给instanceof?

kur*_*nes 2 java oop instanceof

我正在寻找一种方法将参数c传递给instanceof,因为我需要循环遍历代码中显示的数组,但编译器返回错误"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;
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用a.getClass().getSimpleName()并检查它是否等于字符串数组中的元素,但我想更好地理解如何使用关键字instanceof及其工作原理.

Jon*_*eet 9

您没有 - instanceof 运算符始终将类型的名称作为其第二个操作数.但是,您可以使用该方法:Class.isInstance

bool = c.isInstance(a);
Run Code Online (Sandbox Code Playgroud)

注意缺少if/else - 只要你有if (condition) return true; else return false;等等,就可以折叠它.但是,在当前代码中,bool循环之后的值将仅取决于数组的最后一个元素,因为您在每次迭代时都会重新分配它.

你可能真的想要:

boolean bool = false;
for (Class c : array){
   if (c.isInstance(a))
       bool = true;
   }
}
Run Code Online (Sandbox Code Playgroud)

(使用Java 8,您可以使用流来实现anyMatch,但这是另一回事.)

  • 正确的思考,但方法名称实际上是isInstance(). (2认同)