2012-01-29 5 views
5

리플렉션을 통해 호출하고 싶은 메소드가 있습니다. 메서드는 인수에 대해 여러 가지 검사를 수행하며 NullPointer 및 IllegalArgument 예외를 throw 할 수 있습니다.자바 리플렉션 및 확인 된 예외

Reflection을 통해 메서드를 호출하면 catch해야 할 IllegalArgument 및 NullPointer 예외를 throw 할 수 있습니다. 예외가 리플렉션 Invoke 메서드로 인해 발생하는지 또는 메서드 자체에서 발생하는지 여부를 확인하는 방법이 있습니까?

답변

17

메서드 자체가 예외 인 경우 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 
    } 
} 
+3

예외는'MethodInvocationException'이 아닌'InvocationTargetException'이라고합니다. –

+1

@Stephen C 좋은 캐치. – emory

0

처럼 보일 수, 예외의 스택 트레이스는 다른 것입니다.

대신 이러한 함수를 catch하고 메서드 (또는 클래스) 특정 예외로 다시 throw 할 수 있습니다.