Gibt es eine Möglichkeit, den Namen der gerade ausgeführten Methode in Java zu erfahren?
Antworten
Zu viele Anzeigen?
ran
Punkte
73
Kasim Rangwala
Punkte
1705
Ich habe folgende Lösung gefunden (in Android)
/**
* @param className fully qualified className
* <br/>
* <code>YourClassName.class.getName();</code>
* <br/><br/>
* @param classSimpleName simpleClassName
* <br/>
* <code>YourClassName.class.getSimpleName();</code>
* <br/><br/>
*/
public static void getStackTrace(final String className, final String classSimpleName) {
final StackTraceElement[] steArray = Thread.currentThread().getStackTrace();
int index = 0;
for (StackTraceElement ste : steArray) {
if (ste.getClassName().equals(className)) {
break;
}
index++;
}
if (index >= steArray.length) {
// Little Hacky
Log.w(classSimpleName, Arrays.toString(new String[]{steArray[3].getMethodName(), String.valueOf(steArray[3].getLineNumber())}));
} else {
// Legitimate
Log.w(classSimpleName, Arrays.toString(new String[]{steArray[index].getMethodName(), String.valueOf(steArray[index].getLineNumber())}));
}
}
Egl
Punkte
774
Für den Fall, dass die Methode, deren Namen Sie wissen wollen, eine Junit-Testmethode ist, können Sie die Junit-TestName-Regel verwenden: https://stackoverflow.com/a/1426730/3076107
fix
Punkte
692
Ich verwende dieses Code-Snippet mit dem neuesten Android Studio mit dem neuesten Java-Update. Es kann von jeder Aktivität, jedem Fragment usw. aufgerufen werden.
public static void logPoint() {
String[] splitPath = Thread.currentThread().getStackTrace()[3]
.toString().split("\\.");
Log.d("my-log", MessageFormat.format("{0} {1}.{2}",
splitPath[splitPath.length - 3],
splitPath[splitPath.length - 2],
splitPath[splitPath.length - 1]
));
}
nennen wir es so
logPoint();
Ausgabe
... D/my-log: MainActivity onCreate[(MainActivity.java:44)]
mjs
Punkte
19667
Die meisten Antworten hier scheinen falsch zu sein.
public static String getCurrentMethod() {
return getCurrentMethod(1);
}
public static String getCurrentMethod(int skip) {
return Thread.currentThread().getStackTrace()[1 + 1 + skip].getMethodName();
}
Beispiel:
public static void main(String[] args) {
aaa();
}
public static void aaa() {
System.out.println("aaa -> " + getCurrentMethod( ) );
System.out.println("aaa -> " + getCurrentMethod(0) );
System.out.println("main -> " + getCurrentMethod(1) );
}
Ausgänge:
aaa -> aaa
aaa -> aaa
main -> main