InvocationTargetException doit-on désencapsuler la cause ? - Java - Programmation
Marsh Posté le 05-01-2004 à 14:18:17
c'est la bonne chose à faire. D'ailleurs, si tu ne le fais pas, tu n'es plus conforme à la javadoc du InvocationHandler.
disons que méthod.invoke() est explicitement de l'invocation dynamique => il est logique qu'en cas d'erreur, l'exception soit une exception d'invocation.
Par contre, pour le proxy, ce n'est plus vrai : il est plus logique que l'exception source soit retournée puisque l'invocation dynamique intermédiaire doit être transparente.
D'ailleur, le fait de faire un e.getCause() est logique puisque InvocationException est explicitement un wrapper :
Citation : InvocationTargetException is a checked exception that wraps an exception thrown by an invoked method or constructor. |
Marsh Posté le 05-01-2004 à 12:23:43
voiloù le code d'un proxy typique :
la dernière ligne de code ne renvoie non pas un IndexOutOfBoundsException comme on pourrait le croire naïvement, mais un InvocationTargetException, avec la cause kivabien, soit le IndexOutOfBoundsException tant attendu, comme marqué dans la doc de invoke().
La question est : il est très tentant de modifier le handler comme suit
C'est une bonne idée ou un piège à con ?
Si c'est un piège à con, où est le problème ?
Si c'est est pas un, pourquoi ça n'a pas été fait dans Method.invoke() directement ? pour ne pas fausser le point d'origine de l'exception ?
---------------
trainoo.com, c'est fini