Esta vez quiero obtener la anotación de la excepción lanzada. Mi código de ejemplo es la siguiente:Cómo obtener una anotación al recuperar el método de excepción en Java?
public class P {
@MyAnnotation(stringValue = "FirstType", intValue = 999)
public void test() throws Exception {
// ...
throw new NullPointerException();
}
@MyAnnotation(stringValue = "SecondType", intValue = 111)
public void test(int a) throws Exception {
// ...
throw new NullPointerException();
}
}
la clase anterior contienen 2 métodos, y dos de ellos arroja NullPointerException.
Ahora puedo usar callerElement para recuperar la excepción y conocer el nombre del paquete, el nombre de clase y el número de línea que causan la excepción. Aquí está mi código:
public class CallP {
public static void main(String[] argv){
P class_p = new P();
StackTraceElement[] callerElement = null;
try{
class_p.test();
}catch(Exception e){
callerElement = e.getStackTrace();
System.out.println(callerElement[0].toString());
}
}
}
En mi ventana de la consola, puedo ver el mensaje
StackoverflowQuestion.P.test (P.java:9)
Mis preguntas son 1. ¿Cómo obtener la anotación en la cláusula catch? 2. Cuando la sobrecarga de métodos (en la clase P, tengo dos métodos llamados test), ¿cómo obtener la anotación?
Esas son todas mis preguntas. Gracias por pasar tiempo leyendo.
Hola, Adeel Ansari. Puedo usar callerElement [0] .getMethodName() para obtener el nombre del método. Sin embargo, no puedo saber cuál es el que quiero obtener (tengo dos "prueba()"). –
@Charles: Sí, tienes razón. No hay forma de que podamos descubrirlo. Como la única diferencia es, el número de línea. Y lo dudo, si podemos hacer uso de eso para obtener el método deseado y sus anotaciones. –