【问题标题】:How do I pass a variable argument to instanceof?如何将变量参数传递给 instanceof?
【发布时间】:2015-11-30 17:25:17
【问题描述】:

我正在寻找一种将参数 c 传递给 instanceof 的方法,因为我需要像代码中所示那样循环遍历数组,但是编译器返回错误“未知类 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 以及它是如何工作的。

【问题讨论】:

  • c.getClass() 将是解决方案
  • 我担心这可能是XY Problem 类型的问题。与其专注于您尝试的解决方案,不如考虑告诉我们您尝试使用此解决方案解决的潜在问题的详细信息。
  • 类有 isAssignableFromisInstance 方法。检查它们。
  • @HovercraftFullOfEels 好发现的伙伴,

标签: java oop instanceof


【解决方案1】:

你不知道 - 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 来做到这一点,但这是另一回事。)

【讨论】:

  • 想的对,但是方法名其实是isInstance()。
  • “可能真的想要”正文不应该也使用isInstance而不是instanceof吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 2015-01-05
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2015-07-07
相关资源
最近更新 更多