Отражение Java и проверенные исключения - PullRequest
5 голосов
/ 29 января 2012

У меня есть метод, который я хотел бы вызвать с помощью отражения. Метод выполняет несколько различных проверок своих аргументов и может генерировать исключения NullPointer и IllegalArgument.

Вызов метода через Reflection также может вызвать исключения IllegalArgument и NullPointer, которые необходимо перехватить. Есть ли способ определить, вызвано ли исключение методом Invoke для отражения или самим методом?

Ответы [ 2 ]

17 голосов
/ 29 января 2012

Если сам метод вызвал исключение, то он будет заключен в InvocationTargetException .

Ваш код может выглядеть следующим образом

try
{
     method . invoke ( args ) ;
}
catch ( IllegalArgumentException cause )
{
     // reflection exception
}
catch ( NullPointerException cause )
{
     // reflection exception
}
catch ( InvocationTargetException cause )
{
     try
     {
           throw cause . getCause ( ) ;
     }
     catch ( IllegalArgumentException c )
     {
           // method exception
     }
     catch ( NullPointerException c )
     {
            //method exception
     }
}
0 голосов
/ 29 января 2012

В ответ на исходный вопрос трассировки стека в исключениях будут другими.

В качестве альтернативы вы могли бы заставить функцию перехватывать эти исключения и перебрасывать их как исключения, специфичные для метода (или класса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...