Ich bin mir bewusst, dass ich mit Context
und einer Methode getClass().getName()
eine Zeichenfolge erhalten kann, die den vollständigen Klassennamen darstellt, wie z com.package1.package2.MainActivity
.
Wie kann ich nur den letzten Teil bekommen, nur den Klassennamen? In diesem Fall wäre es eine MainActivity
Zeichenfolge.
Ich kann es mit einer einfachen split()
Methode machen, aber vielleicht gibt es einen besseren Weg, zuverlässiger.
getLocalClassName()
gibt jeden Paketnamen im Stammverzeichnis der App zurück. Dies gibt nur den Namen der Klasse zurück, unabhängig davon, ob er sich im Stammverzeichnis oder in einem anderen Paket befindet.Um nur den Namen der Klasse und nicht den vollständigen Pfad zu erhalten, verwenden Sie diesen Ausdruck:
String className = this.getLocalClassName(); //or String className = getBaseContext().getLocalClassName(); //or String className = getApplicationContext().getLocalClassName();
quelle
Alternativ können Sie Folgendes verwenden:
private static final String TAG = MainActivity.class.getSimpleName();
quelle
Unabhängig davon, wie Sie es tun, müssen Sie zusätzlich zu getClass einen zusätzlichen Vorgang ausführen. Ich würde dies über Split empfehlen:
String className = xxx.getClass(); int pos = className.lastIndexOf ('.') + 1; String onlyClass = className.substring(pos);
quelle
split
odersubstring
.Wenn Sie innerhalb einer Methode einen Klassennamen benötigen, verwenden Sie
getLocalClassName()
Wenn Sie einen Klassennamen außerhalb einer Methode benötigen, verwenden Sie
getClass().getSimpleName()
Wenn Sie den Klassennamen in mehreren Methoden innerhalb derselben Klasse wiederverwenden möchten, verwenden Sie
private final String TAG = getClass().getSimpleName();
innerhalb der Klasse und verwenden Sie dann die TAG-Variable in jeder Methode.Wenn Sie über statische Methoden auf den Klassennamen zugreifen möchten, verwenden Sie
private static final String TAG = MainActivity.class.getSimpleName();
jetzt die statische Variable TAG in Ihren statischen Methoden.quelle
Keine anderen Lösungen funktionieren für mich, keine Ahnung warum. Ich benutze
this.getClass().getName().replace("$",".").split("\\.")[3]
Nachteile: in einer Zeichenfolge, und Sie können es in Threads und Listenern verwenden.
(In Listeres bekomme ich so etwas wie com.djdance.android.main $ 53 )
quelle
Wenn Sie den Namen außerhalb der Klasse erhalten möchten, können Sie Folgendes anrufen:
MainActivity.class.getSimpleName()
Auf diese Weise können Sie vermeiden, dass Ihre Klasse statisch wird.
quelle
Verwenden Sie die
getSimpleName
Methode:String name = getClass().getSimpleName();
quelle
In Kotlin sollten Sie verwenden:
val className = javaClass.simpleName
quelle
Kotlin Weg:
MainActivity::class.java.simpleName
quelle