2014-09-20 3 views
0

Я использую отражение в своем коде, чтобы дать возможность пользователю напрямую вызвать методы, не записывая тоны операторов if ... else, но у меня есть проблема. У меня есть метод, называемый Exit(), который я хочу бросить в свое настраиваемое исключение, но когда я добавляю оператор catch для строки method.invoke(), компилятор сообщает мне, что такое исключение никогда не выбрасывается в этом выражении , но совершенно возможно, что пользователь вызовет этот метод, как я могу найти решение этой проблемы?Как указать типы исключений, используя отражение?

вот мое отражение код

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()); 
       } 

ответ

3

В Method#invoke(..) Javadoc состояния

Броски:

InvocationTargetException - если основной метод выдает исключение.

Таким образом, Method#invoke() выдает InvocationTargetException, который обертывает исключение вашего метода. Вы можете использовать InvocationTargetException#getCause() для извлечения завернутого исключения и делать с ним все, что хотите.

+0

большое спасибо – Carmine

Смежные вопросы