In diesem Beitrag wird erläutert, wie der Klassenname der zugrunde liegenden Klasse von Objekten in Java ermittelt wird.
1. Klasse get*Name()
Methoden
Der einfachste Weg ist, die anzurufen getClass()
-Methode, die den Namen oder die Schnittstelle der Klasse zurückgibt, die durch ein Objekt dargestellt wird, das kein Array ist. Können wir auch verwenden getSimpleName()
oder getCanonicalName()
, die den einfachen Namen (wie im Quellcode) bzw. den kanonischen Namen der zugrunde liegenden Klasse zurückgibt. getTypeName()
ist eine neue Ergänzung zu JDK in Java SE 8, die intern aufruft getClass()
.
⮚ Für Klassenobjekte:
1 2 3 4 5 6 7 |
System.out.println(this.getClass().getSimpleName()); // druckt <class name> // Folgendes gibt <package name> + <class name> System.out.println(this.getClass().getName()); System.out.println(this.getClass().getCanonicalName()); System.out.println(this.getClass().getTypeName()); |
⮚ Für Referenztypen:
1 2 3 4 5 |
String obj = "A"; System.out.println(obj.getClass().getSimpleName()); // String System.out.println(obj.getClass().getName()); // java.lang.String System.out.println(obj.getClass().getCanonicalName()); // java.lang.String System.out.println(obj.getClass().getTypeName()); // java.lang.String |
⮚ Für Arrays:
1 2 3 4 5 |
String[] array = { "1", "B", "C" }; System.out.println(array.getClass().getSimpleName()); // String[] System.out.println(array.getClass().getCanonicalName()); // java.lang.String[] System.out.println(array.getClass().getTypeName()); // java.lang.String[] |
2. Verwenden Class.getEnclosingClass()
Methode
Für die anonyme innere Klasse müssen wir anrufen Class.getEnclosingClass()
die die unmittelbar einschließende Klasse der zugrunde liegenden Klasse zurückgibt.
1 2 3 4 5 6 7 8 9 10 |
// Klassennamen in Java ermitteln public void getClassName() { String className = new Object() {} .getClass() .getEnclosingClass() .getName(); System.out.println("Current Class is " + className); } |
Wir können auch eine innere Klasse definieren, um den Klassennamen der einschließenden Klasse zu erhalten, wie unten gezeigt:
1 2 3 4 5 6 7 8 9 10 |
// Klassennamen in Java ermitteln public void getClassName() { class Dummy {}; String className = Dummy.class .getEnclosingClass() .getName(); System.out.println(className); } |
3. Stack-Trace verwenden
Wir können ein Array von Stack-Trace-Elementen erhalten, die den Stack-Trace zu einem Throwable darstellen. Das erste Element des zurückgegebenen Stack-Trace-Arrays enthält den Stack-Frame der aktuellen Methode (der auch Klasseninformationen speichert).
1 2 3 4 5 6 7 8 9 |
// Klassennamen in Java ermitteln public void getClassName() { String className = new Throwable() // oder neue `Exception()` .getStackTrace()[0] .getClassName(); System.out.println("Current Class is " + className); } |
Der Stack-Trace eines aktuellen Threads gibt auch ein Array von Stack-Trace-Elementen zurück, die den Stack-Dump dieses Threads darstellen. Wir finden den Stackrahmen der aktuellen Methode (der Klasseninformationen enthält) bei Index 1 des Arrays.
1 2 3 4 5 6 7 8 9 |
// Klassennamen in Java ermitteln public void getClassName() { String className = Thread.currentThread() .getStackTrace()[1] .getClassName(); System.out.println("Current Class is " + className); } |
Bitte beachten Sie, dass diese Methode nicht sicher verwendet werden kann, da einige virtuelle Maschinen unter bestimmten Umständen einen oder mehrere Stack-Frames aus dem Stack-Trace auslassen können.
Das ist alles über checking
Klassennamen in Java.