如何使用反射指定异常类型?

时间:2014-09-20 22:24:08

标签: java exception reflection

我在我的代码中使用反射,让用户有机会直接调用方法,而无需编写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());
                }

1 个答案:

答案 0 :(得分:3)

Method#invoke(..) javadoc状态

  

<强>抛出

     

InvocationTargetException - 如果底层方法抛出一个   异常。

因此Method#invoke()会抛出InvocationTargetException,它会包装您方法的异常。您可以使用InvocationTargetException#getCause()检索包装的异常并随意执行任何操作。