Gibt es eine Möglichkeit, den Namen der gerade ausgeführten Methode in Java zu erfahren?
Antworten
Zu viele Anzeigen?
alexsmail
Punkte
5471
Radiodef
Punkte
36216
Dies kann geschehen durch StackWalker
seit Java 9.
public static String getCurrentMethodName() {
return StackWalker.getInstance()
.walk(s -> s.skip(1).findFirst())
.get()
.getMethodName();
}
public static String getCallerMethodName() {
return StackWalker.getInstance()
.walk(s -> s.skip(2).findFirst())
.get()
.getMethodName();
}
StackWalker
ist auf Faulheit ausgelegt und daher wahrscheinlich effizienter als z.B., Thread.getStackTrace
die eifrig ein Array für den gesamten Aufrufstapel erstellt. Weitere Informationen finden Sie auch in der GEP.
Nicht registrierter Benutzer
Punkte
0
Der schnellste Weg Das habe ich herausgefunden:
import java.lang.reflect.Method;
public class TraceHelper {
// save it static to have it available on every call
private static Method m;
static {
try {
m = Throwable.class.getDeclaredMethod("getStackTraceElement",
int.class);
m.setAccessible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getMethodName(final int depth) {
try {
StackTraceElement element = (StackTraceElement) m.invoke(
new Throwable(), depth + 1);
return element.getMethodName();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
Es greift direkt auf die native Methode getStackTraceElement(int depth) zu. Und speichert die zugängliche Methode in einer statischen Variablen.
Sumit Singh
Punkte
24033
Jay
Punkte
661