在我的代码中有一个应该调用对象的方法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);
}
您认为哪个更好?
答案 0 :(得分:2)
真正的问题是在这里是否真的有必要进行补充。 学习精妙的技巧并了解反射对开发人员来说是非常重要的,并且可以帮助您了解很多。但它并不总是正确的解决方案。 也许您应该只在界面中添加类似的内容。
public interface DoingSometing {
SomeReturnObject doSomething(Boolean param);
}
并且该组件应实现该接口,在最坏的情况下,您将必须进行强制转换以避免反射,并且如果拥有的对象可能会发生ClassCastException