Wie erhalte ich den Namen einer Klasse ohne das Paket?

199

In C # haben wir Type.FullNameund Type.Nameum den Namen eines Typs (in diesem Fall Klasse) mit oder ohne Namespace (Paket in Java-Welt) zu erhalten.

Was ist das Java-Äquivalent Type.Name?

Natürlich muss es einen besseren Weg geben, als Class.getName()den Paketnamen manuell zu verwenden und zu entfernen.

Ola Herrdahl
quelle
1
Ich habe eine schnelle Suche durchgeführt und war von den ersten Ergebnissen, die ich bei Google gefunden habe, nicht beeindruckt. Betrachten Sie dies daher als Werbegeschenk.
Ola Herrdahl
5
Vergiss Google! Der erste Ort, um nach Antworten über die Java-Standardklassenbibliothek zu suchen, sind die Java-API-Dokumente (auch bekannt als javadocs): java.sun.com/javase/reference/api.jsp
Stephen C

Antworten:

357

Class.getSimpleName()

Gibt den einfachen Namen der zugrunde liegenden Klasse zurück, wie im Quellcode angegeben. Gibt eine leere Zeichenfolge zurück, wenn die zugrunde liegende Klasse anonym ist.

Der einfache Name eines Arrays ist der einfache Name des Komponententyps, an den "[]" angehängt ist. Insbesondere lautet der einfache Name eines Arrays, dessen Komponententyp anonym ist, "[]".

Es entfernt tatsächlich die Paketinformationen aus dem Namen, aber dies ist Ihnen verborgen.

Bozho
quelle
Es ordnet auch den internen Namen einer anonymen Klasse einem leeren String zu und erledigt Dinge mit Array-Klassennamen.
Stephen C
4
Ich wusste nicht, dass es eine leere Zeichenfolge zurückgeben könnte, und meiner Meinung nach ist das ein Designfehler. Wenn es keinen einfachen Namen gibt, sollte eine Ausnahme ausgelöst werden.
Finnw
20

Die folgende Funktion funktioniert in JDK Version 1.5 und höher.

public String getSimpleName()
identy
quelle
14

Wenn Sie ein StackTraceElement verwenden, verwenden Sie:

String fullClassName = stackTraceElement.getClassName();
String simpleClassName = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);

System.out.println(simpleClassName);
Fidel
quelle