Wie bekomme ich nur den Klassennamen, nicht den vollständigen Pfad?

71

Ich bin mir bewusst, dass ich mit Contextund 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 MainActivityZeichenfolge.

Ich kann es mit einer einfachen split()Methode machen, aber vielleicht gibt es einen besseren Weg, zuverlässiger.

Sandale
quelle

Antworten:

163

Das ist alles was Sie brauchen.

MainActivity.this.getClass().getSimpleName();
RobGThai
quelle
1
Das ist das Richtige. Das 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.
Sandalone
20

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(); 
Sandale
quelle
4
Jeder Tag ist ein Schultag, schöner Fund :-)
Rawkode
1
Ja, ich hasse es, so bald nach dem Posten einer Frage zu sein, aber es ist besser, wenn ich sie auf diese Weise poste, als eine Frage zu löschen.
Sandalone
Verlassen Sie sich nicht auf beide 3, wenn Sie auf alte API, null oder nutzlosen Text zurückgeben. Für mich funktioniert nur getClass (). GetName ()
djdance
7

Alternativ können Sie Folgendes verwenden:

private static final String TAG = MainActivity.class.getSimpleName();
Yvan Pearson
quelle
1

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);
Rawkode
quelle
Lesen Sie die letzte Zeile seines Beitrags, den er nicht teilen möchte (Teilzeichenfolge)
Shankar Agarwal,
1
Das ist in Ordnung, ich habe Split nicht verwendet.
Rawkode
@Rawkode Es gibt einen besseren Weg. Dieser ist sicherer als die Verwendung von splitoder substring.
Sandalone
1
  1. Wenn Sie innerhalb einer Methode einen Klassennamen benötigen, verwenden Sie getLocalClassName()

  2. Wenn Sie einen Klassennamen außerhalb einer Methode benötigen, verwenden Sie getClass().getSimpleName()

  3. 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.

  4. 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.

Ashwin
quelle
0

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 )

djdance
quelle
0

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.

RiccardoCh
quelle
0

Verwenden Sie die getSimpleNameMethode:

String name = getClass().getSimpleName();
Saddan
quelle
0

In Kotlin sollten Sie verwenden:

val className = javaClass.simpleName
MustafaKhaled
quelle
0

Kotlin Weg: MainActivity::class.java.simpleName

Panos Gr
quelle