Java - den aktuellen Klassennamen erhalten?

Alles, was ich zu tun versuche, ist, den aktuellen Klassennamen zu erhalten, und Java fügt einen nutzlosen Unsinn $1 an das Ende meines Klassennamens an. Wie kann ich es loswerden und nur den tatsächlichen Klassennamen zurückgeben?

String className = this.getClass().getName();
Lösung

Das "$1" ist kein "nutzloser Unsinn". Wenn Ihre Klasse anonym ist, wird eine Zahl angehängt.

Wenn Sie nicht die Klasse selbst, sondern ihre deklarierende Klasse haben wollen, können Sie getEnclosingClass() verwenden. Zum Beispiel:

Class<?> enclosingClass = getClass().getEnclosingClass();
if (enclosingClass != null) {
  System.out.println(enclosingClass.getName());
} else {
  System.out.println(getClass().getName());
}

Das kann man in eine statische Utility-Methode verschieben.

Beachten Sie aber, dass dies nicht der aktuelle Klassenname ist. Die anonyme Klasse ist eine andere Klasse als die sie einschließende Klasse. Bei inneren Klassen ist der Fall ähnlich.

Kommentare (1)

Versuchen Sie dies zu verwenden this.getClass().getCanonicalName() oder this.getClass().getSimpleName(). Wenn es eine anonyme Klasse ist, verwenden Sie this.getClass().getSuperclass().getName()

Kommentare (7)

In Ihrem Beispiel bezieht sich "this" wahrscheinlich auf eine anonyme Klasseninstanz. Java gibt diesen Klassen einen Namen, indem es eine "$Nummer" an den Namen der umschließenden Klasse anhängt.

Kommentare (1)