Diesmal möchte ich die Annotation von der geworfenen Ausnahme erhalten. Mein Beispiel-Code ist wie folgt:Wie bekomme ich eine Annotation durch Abrufen der Ausnahmemethode in 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();
}
}
Die obige Klasse enthalten 2 Methoden, und beide Nullpointer werfen.
Jetzt kann ich callerElement verwenden, um die Ausnahme abzurufen und den Paketnamen, den Klassennamen und die Zeilennummer kennen, die die Ausnahme verursachen. Hier ist mein Code:
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());
}
}
}
In meinem Konsolenfenster kann ich die Meldung
StackoverflowQuestion.P.test (P.java:9)
Meine Fragen sind 1. Wie bekomme ich die Annotation in die Fangklausel? 2. Wenn Methode überladen (in Klasse P habe ich zwei Methoden namens Test), wie bekomme ich die Annotation?
Das sind alle meine Fragen. Danke, dass Sie Zeit mit Lesen verbracht haben.
Hallo, Adeel Ansari. Ich kann callerElement [0] .getMethodName() verwenden, um den Methodennamen zu erhalten. Ich kann jedoch nicht wissen, welches das ist, das ich bekommen möchte (ich habe zwei "test()"). –
@Charles: Ja, Sie haben Recht. Das können wir unmöglich herausfinden. Als einziger Unterschied ist die Zeilennummer. Und ich bezweifle, dass wir davon Gebrauch machen können, um die gewünschte Methode und ihre Anmerkungen zu erhalten. –