Java-检查是否存在方法而不是NoSuchMethodException

时间:2019-06-04 07:25:23

标签: java reflection

在我的代码中有一个应该调用对象的方法doSomething的方法。预先知道对象的类是否具有public方法。到目前为止,我使用以下代码:

try {
  Method method = component.getClass().getMethod("doSomething", Boolean.TYPE);
  method.invoke(component, true);
} catch (final NoSuchMethodException e) {
  // do nothing as for some components the method "doSomething" simply does not exist
} 

我现在想知道是否应该通过检查对象的类是否具有公共方法NoSuchMethodException来避免使用doSomething

final Method method = Arrays.stream(component.getClass().getMethods())
      .filter(m -> m.getName().equals("doSomething")).findFirst().orElse(null);
if (method != null) {
  method.invoke(component, true);
}

您认为哪个更好?

1 个答案:

答案 0 :(得分:2)

真正的问题是在这里是否真的有必要进行补充。 学习精妙的技巧并了解反射对开发人员来说是非常重要的,并且可以帮助您了解很多。但它并不总是正确的解决方案。 也许您应该只在界面中添加类似的内容。

public interface DoingSometing { SomeReturnObject doSomething(Boolean param); }

并且该组件应实现该接口,在最坏的情况下,您将必须进行强制转换以避免反射,并且如果拥有的对象可能会发生ClassCastException