logo

Excepción de invocación de objetivos

El Excepción de invocación de objetivos es una excepción marcada que contiene una excepción lanzada por un método o constructor invocado. Desde JDK 1.4, esta excepción se ha adaptado para ajustarse al mecanismo de encadenamiento de excepciones de propósito general. La 'excepción de destino' que se proporciona en el momento de la construcción y a la que se accede mediante el método getTargetException() ahora se conoce como la causa y se puede acceder a ella mediante el método Throwable.getCause(), así como el 'método heredado'.

En pocas palabras, cuando invocamos una clase usando Method.invoke(), genera una excepción; esta envuelto por el java.lang.reflect.InvocationTargetException clase.

Causa de InvokationTargetException

La InvokationTargetException ocurre principalmente mientras se trabaja con el Java API de reflexión e intente invocar un método o constructor en la capa de reflexión que arroje una excepción subyacente.

La capa de reflexión contiene la excepción real lanzada por los métodos predeterminados.

Cómo resolver java.lang.reflect.InvocationTargetException

La InvocationTargetException es causada por el método invocado, que genera una excepción. La excepción subyacente se puede encontrar utilizando el método getCause(). Por lo tanto, es necesario encontrar la excepción real y resolverla para resolver InvocationTargetException.

Excepción de invocación de objetivos

Considere el siguiente ejemplo, que genera intencionalmente una excepción (división por cero) en el método Demo(), que se invoca mediante Method.invoke(). Por lo tanto, la salida generará tanto AirthmeticException (DividebyZero) como InvokationTargetException.

TestInvokationException.java:

 import java.lang.reflect.Method; public class TestInvocationException { public static void main(String[] args) { TargetInvocation ti = new TargetInvocation(); // Accessing all the methods of TargetInvocationClass: Method[] m = TargetInvocation.class.getMethods(); try { // Invoking the first method of the TargetInvocatioClass: m[0].invoke(ti); } catch(Exception e) { // Printing the wrapper exception: System.out.println('Wrapper exception: ' + e); // Printing the 'actual' exception: System.out.println('Underlying exception: ' + e.getCause()); } } } class TargetInvocation{ public void Demo() { // Dividing by zero to intentionally throw an exception: System.out.println(10 / 0); } } 

Producción:

 Wrapper exception: java.lang.reflect.InvocationTargetException Underlying exception: java.lang.ArithmeticException: / by zero