2012-01-29 2 views
5

J'ai une méthode que j'aimerais appeler par réflexion. La méthode effectue certaines vérifications sur ses arguments et peut lancer des exceptions NullPointer et IllegalArgument.Réflexion Java et exceptions vérifiées

L'appel de la méthode via Reflection peut également déclencher des exceptions IllegalArgument et NullPointer qui doivent être interceptées. Existe-t-il un moyen de déterminer si l'exception est provoquée par la méthode Refloke Invoke ou par la méthode elle-même?

Répondre

17

Si la méthode elle-même a déclenché une exception, elle sera entourée d'un InvocationTargetException.

Votre code pourrait ressembler à ceci

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

L'exception s'appelle 'InvocationTargetException', pas' MethodInvocationException'. –

+1

@Stephen C Bonne prise. – emory

0

En réponse à la question initiale, les traces de la pile des exceptions seraient différentes. Comme alternative, vous pourriez faire en sorte que la fonction capture ces exceptions et les relance en tant qu'exceptions spécifiques à la méthode (ou à la classe).