Wie bekomme ich den Binärnamen einer Java-Klasse, wenn man nur den vollqualifizierten Namen hat?
Die Reflection-Klassen und -Methoden sowie die Klassenladeprogramme usw. benötigen die sogenannten "binären" Namen der Klassen, mit denen gearbeitet werden soll.
Die Frage ist, wie man den Binärnamen erhält, wenn man nur den vollständig qualifizierten Namen hat, d. H. Den Namen, den man im Quellcode verwenden würde.
Zum Beispiel:
package frege;
public static class RT {
....
public static class X { .... }
}
Der vollständig qualifizierte Name der Klasse wärefrege.RT.X
. Um das Klassenobjekt zu erhalten, muss man jedoch schreiben:
Class.forName("frege.RT$X")
und nicht
Class.forName("frege.RT.X") // fails with ClassNotFoundException
daX
zufällig eine innere Klasse vonfrege.RT
.
Eine mögliche, aber ungeschickte Lösung wäre, sie zu ersetzen.
mit$
von rückwärts eins nach dem anderen bisClass.forName()
wirft nichtClassNotFoundException
mehr oder es gibt keine mehr.
ersetzen.
Gibt es eine bessere / bekannte / Standardlösung? Ich habe in den API-Dokumenten nach gesuchtClass
, CLassLoader
undjava.lang.reflect
fand aber nichts brauchbares.