Ich versuche nur, den aktuellen Klassennamen abzurufen, und Java hängt eine nutzlose, unsinnige $ 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();
String className = getClass().getName().substring(0, getClass().getName().indexOf("$"))
$1
dann bekommen , weil der Name der Klasse ist$1
. Wenn Sie etwas anderes erwarten, verwenden Siethis
in der richtigen Klasse anstelle der falschen.Antworten:
Das "$ 1" ist nicht "nutzlos unsinnig". Wenn Ihre Klasse anonym ist, wird eine Nummer angehängt.
Wenn Sie die Klasse selbst nicht möchten, sondern ihre deklarierende Klasse, können Sie sie verwenden
getEnclosingClass()
. Zum Beispiel:Sie können dies in einer statischen Dienstprogrammmethode verschieben.
Beachten Sie jedoch, dass dies nicht der aktuelle Klassenname ist. Die anonyme Klasse unterscheidet sich von der umschließenden Klasse. Ähnlich verhält es sich mit inneren Klassen.
quelle
null
, und die letzte Nichtklasse verwendennull
, die Sie erhalten haben?Versuchen,
Dies funktioniert so lange, wie Sie es nicht in einer statischen Methode verwenden.
quelle
""
Versuchen Sie dies
this.getClass().getCanonicalName()
oderthis.getClass().getSimpleName()
. Wenn es sich um eine anonyme Klasse handelt, verwenden Siethis.getClass().getSuperclass().getName()
quelle
Sie können
this.getClass().getSimpleName()
wie folgt verwenden:quelle
Die Kombination beider Antworten. Gibt auch einen Methodennamen aus:
quelle
Diese Antwort ist spät, aber ich denke, es gibt einen anderen Weg, dies im Kontext einer anonymen Handler-Klasse zu tun.
sagen wir:
es wird das gleiche Ergebnis erzielen. Darüber hinaus ist es praktisch, da jede Klasse zur Kompilierungszeit definiert wird, sodass keine Dynamik beeinträchtigt wird.
darüber hinaus, wenn die Klasse wirklich verschachtelt ist, dh
A
B
die Klasse von B leicht bekannt sein tatsächlich eingeschlossen ist durch :quelle
In Ihrem Beispiel
this
bezieht sich wahrscheinlich auf eine anonyme Klasseninstanz. Java gibt diesen Klassen einen Namen, indem a$number
an den Namen der einschließenden Klasse angehängt wird.quelle
Ich gehe davon aus, dass dies für eine anonyme Klasse geschieht. Wenn Sie eine anonyme Klasse erstellen, erstellen Sie tatsächlich eine Klasse, die die Klasse erweitert, deren Namen Sie erhalten haben.
Der "sauberere" Weg, um den gewünschten Namen zu erhalten, ist:
Wenn Ihre Klasse eine anonyme innere Klasse ist,
getSuperClass()
sollten Sie die Klasse angeben, aus der sie erstellt wurde. Wenn Sie es über eine Schnittstelle erstellt haben, sind Sie eine Art SOL, denn das Beste, was Sie tun können, istgetInterfaces()
, dass Sie möglicherweise mehr als eine Schnittstelle erhalten.Der "hackige" Weg ist, einfach den Namen mit zu bekommen
getClassName()
und einen regulären Ausdruck zu verwenden, um das zu löschen$1
.quelle
Hier ist eine Android-Variante, aber das gleiche Prinzip kann auch in einfachem Java verwendet werden.
quelle
Ich habe festgestellt, dass dies für meinen Code funktioniert, aber mein Code holt die Klasse aus einem Array innerhalb einer for-Schleife heraus.
quelle
Reflexions-APIs
quelle