544 Stimmen

Abfrage des Namens der aktuell ausgeführten Methode

Gibt es eine Möglichkeit, den Namen der gerade ausgeführten Methode in Java zu erfahren?

4voto

ran Punkte 73
String methodName =Thread.currentThread().getStackTrace()[1].getMethodName();
System.out.println("methodName = " + methodName);

3voto

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())}));
    }
}

3voto

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

3voto

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)]

1voto

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X