Gibt es eine Möglichkeit, zusätzliche Informationen über eine Methode zu erhalten, wenn Sie eine Ausnahme (Stacktrace) bekommen? Ich brauche genau die Anmerkungen. Wie man den Methodennamen und den Klassennamen bekommt, ist verständlich.Get method Anmerkungen von StackTrace
Antwort
Wenn Sie einen Stack-Trace erhalten, können Sie immer Informationen über die Klassen, ihre Methoden sowie ihre Anmerkungen erhalten. Sie müssen etwas zusätzlichen Code schreiben, um zu diesen Informationen zu gelangen. Sie müssen die Methode aus dem Stack-Trace-Element abrufen und dann eine Methode mit Reflektion materialisieren und deren Anmerkungen erhalten.
Hier ist ein Beispielcode, der demonstriert, wie Sie die Annotationsinformationen aus einer Stack-Trace abrufen können. Der entsprechende Code ist in Methode printAnnotationsFromStacktrace()
:
@Ignore
public class SimpleTests2 {
@Ignore
@Deprecated
public static void main(String[] args) throws ParseException, ClassNotFoundException {
System.out.println(numUnique(new double[]{1.0, 1.0, 2.0, 3.0, 4.0, 3.0}));
}
@SuppressWarnings("test")
private static int numUnique(double[] list) throws ClassNotFoundException {
int unique = 0;
for (int i = 0; i < list.length; i++) {
boolean existsBefore = false;
for (int j = i - 1; j >= 0; j--) {
if (list[i] == list[j]) {
existsBefore = true;
break;
}
}
if(!existsBefore) {
unique++;
}
}
printAnnotationsFromStacktrace();
return unique;
}
private static void printAnnotationsFromStacktrace() throws ClassNotFoundException {
StackTraceElement[] stacktraces = Thread.currentThread().getStackTrace();
for(StackTraceElement stackTraceElement : stacktraces) {
Class<?> aClass = Class.forName(stackTraceElement.getClassName());
System.out.println(aClass);
printAnnotation("\t%s%n", aClass.getAnnotations());
String methodName = stackTraceElement.getMethodName();
Method[] methods = aClass.getMethods();
for(Method method : methods) {
if(method.getName().equals(methodName)) {
System.out.printf("\t%s%n", method);
printAnnotation("\t\t%s%n", method.getDeclaredAnnotations());
}
}
}
}
private static void printAnnotation(String pattern, Annotation[] annotations) {
for(Annotation annotation : annotations) {
System.out.printf(pattern, annotation);
}
}
}
Wenn Sie diesen Code ausführen, erhalten Sie einen Ausdruck der Klassennamen mit entsprechenden Anmerkungen als auch von dem Stack-Trace-Verfahren zusammen mit seinen Anmerkungen sehen. So etwas wie dieses:
class java.lang.Thread
public java.lang.StackTraceElement[] java.lang.Thread.getStackTrace()
class SimpleTests2
@org.junit.Ignore(value="")
class SimpleTests2
@org.junit.Ignore(value="")
class SimpleTests2
@org.junit.Ignore(value="")
public static void SimpleTests2.main(java.lang.String[]) throws java.text.ParseException,java.lang.ClassNotFoundException
@org.junit.Ignore(value="")
@java.lang.Deprecated(forRemoval=false, since="")
- 1. Get Stacktrace als String
- 2. Get stacktrace in C# Methode
- 3. Get in Method Signatur - Python
- 4. ASP.net Get Debug StackTrace im Browser
- 5. Get symfony Route von Controller-Aktion Anmerkungen
- 6. Get Stacktrace während eines Anwendungsabsturzes - c/C++
- 7. Get Ausnahme StackTrace als Ausgabe von Oozie Java Aktion
- 8. Yii2: data-method = 'post' sendet GET-Anfrage
- 9. Get Method Input-Attribute mit AspectJ Annotation
- 10. C# Get Calling Method ohne Stack Trace
- 11. Rückgabetyp von Exception Stacktrace
- 12. Erste Projektionen von Method
- 13. Jrockit Stacktrace
- 14. Get StackTrace für Absturz, ohne die App in einem Debugger
- 15. Method Annotation Vererbung
- 16. POST zu GET Scenario, method body, um String-Parameter abzufragen
- 17. Datenbindung von @ModelAttribute mit Anmerkungen versehene Parameter
- 18. Informationen zur Verwendung von TypeScript in AWS NodeJS. (get StackTrace von TS statt JS eins)
- 19. Rails 5 data-method = Löschen sendet GET-Anforderung
- 20. Spring AOP get method Parameterwert basierend auf dem Parameternamen
- 21. Factory Method - Unbekannter Parameter
- 22. Anmerkungen/Anmerkungen zu Morris.js hinzufügen
- 23. Symfony2 Routing mit Anmerkungen
- 24. eine Tableview von Anmerkungen
- 25. Abhängigkeit von Spring-Anmerkungen
- 26. Erstellen von benutzerdefinierten Anmerkungen
- 27. autowiring von Anmerkungen
- 28. Aufruf der Post-Method Ursachen "405 Method not allowed" -Error
- 29. Express: next (err) stacktrace
- 30. Fehlende Informationen Stacktrace
Welche Plattform/Sprache verwenden Sie? Java? –
ja, habe es vergessen, es ist meine erste Frage) – Zhenya