我在我的代码中使用反射,让用户有机会直接调用方法,而无需编写if ... else语句或开关的音调,但我遇到了问题。 我有一个名为Exit()的方法,我想抛出我的自定义异常,但是当我为method.invoke()行添加一个catch语句时,编译器告诉我在那个语句中永远不会抛出那种异常,但是用户完全可以调用该方法,我该如何找到解决这个问题的方法呢?
这是我的反思代码
try {
methodName = input.nextLine();
Class<?> facade = StoreFacade.getInstance().getClass();
Method method = facade.getDeclaredMethod(methodName);
method.setAccessible(true);
method.invoke(StoreFacade.getInstance());
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}catch (Exceptions.EndOfSessionException e){
System.out.println(e.getMessage());
}
答案 0 :(得分:3)
Method#invoke(..)
javadoc状态
<强>抛出强>:
InvocationTargetException
- 如果底层方法抛出一个 异常。
因此Method#invoke()
会抛出InvocationTargetException
,它会包装您方法的异常。您可以使用InvocationTargetException#getCause()
检索包装的异常并随意执行任何操作。