HOWTO · Java
Comprender el error java.lang.reflect.InvocationTargetException en Java
Este artículo habla sobre el error InvocaciónTargetException en Java.
En este artículo, aprenderemos sobre java.lang.reflect.InvocationTargetException en Java.
el error java.lang.reflect.InvocationTargetException en Java
La excepción java.lang.reflect.InvocationTargetException es una excepción muy común cuando un desarrollador trabaja con la API Java Reflection. Una excepción marcada contiene una excepción lanzada por el método invocado o un constructor.
A partir del lanzamiento de JDK 1.4,, esta excepción se actualizó para ajustarse al mecanismo de encadenamiento de excepciones de propósito general. En resumen, cada vez que un desarrollador intenta invocar una clase utilizando Method.invoke(), obtenemos InvocaciónTargetException y se envuelve con java.lang.reflect.InvocationTargetException.
Causas del error java.lang.reflect.InvocationTargetException
La InvocaciónTargetException ocurre principalmente cuando un desarrollador está trabajando con la capa de reflexión e intenta invocar un constructor o un método que arroja una excepción subyacente. Entonces, la API de reflexión de Java envuelve la excepción lanzada por el método con la InvocaciónTargetException.
Veamos un ejemplo de código para entenderlo mejor.
Código de ejemplo:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89 / 0;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Producción :
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at Test.main(Test.java:13)
Caused by: java.lang.ArithmeticException: / by zero
at Test.divideByZero(Test.java:6)
... 5 more
Solucione el error java.lang.reflect.InvocationTargetException en Java
Con base en lo anterior, entendimos que la excepción subyacente es el motivo del error java.lang.reflect.InvocationTargetException. Podemos obtener más información sobre la excepción subyacente utilizando el método getCause () de la clase Throwable.
Por lo tanto, resolver la InvocaciónTargetException implica encontrar y resolver la excepción subyacente.
Código de ejemplo:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89 / 0;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
} catch (InvocationTargetException e) {
System.out.println(e.getCause());
}
}
}
Producción :
java.lang.ArithmeticException: / by zero
En el resultado anterior, la excepción subyacente real es ArithmeticException, que ocurre porque estamos dividiendo por cero.
Una vez que solucionamos la excepción subyacente, también se resuelve la InvocaciónTargetException. El siguiente es el código de trabajo completo sin excepciones; Acabamos de eliminar la parte de dividir por cero.
Código fuente completo:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89 / 9;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Conclusión
En este artículo, aprendimos cómo se ajustan las excepciones subyacentes cuando trabajamos en la capa de reflexión en Java. Entendimos cómo obtener la excepción subyacente al trabajar con java.lang.reflect.InvocationTargetException y cómo resolverla.