Ich möchte einige Code wie folgt schreiben:Welche java.lang.Class-Methode generiert die richtige Eingabe für Class.forName()?
Object o = ...;
String oTypeName = o.getClass().getName();
//on the other side of the wire:
Class<?> oClass = Class.forName(oTypeName);
Object oAgain = oClass.newInstance();
Allerdings ist es aus dem javadoc nicht klar, welche Methode ich oTypeName
initialisieren verwenden soll, dh welche Methode die erwartete Eingang Class.forName()
produzieren:
- : "Gibt den kanonischen Namen der zugrunde liegenden Klasse gemäß der Java-Sprachspezifikation zurück. Gibt null zurück, wenn die zugrunde liegende Klasse keinen kanonischen Namen hat (dh wenn es sich um eine lokale oder anonyme Klasse oder ein Array handelt) Typ hat keinen kanonischen Namen). "
getName()
: "Gibt den Namen der Entität (Klasse, Schnittstelle, Array-Klasse, primitiver Typ oder void), die von diesem Klassenobjekt dargestellt wird, als String zurück. Wenn dieses Klassenobjekt einen Referenztyp darstellt, der kein Array-Typ ist dann wird der binäre Name der Klasse zurückgegeben, wie von der Java ™ -Sprachspezifikation spezifiziert. "getTypeName()
: "Geben Sie eine informative Zeichenfolge für den Namen dieses Typs zurück."
Es ist ziemlich offensichtlich, dass ich nicht wollen, entweder von diesen:
getSimpleName()
: „Gibt den einfachen Namen der zugrundeliegenden Klasse wie im Quellcode gegeben“toString()
: „Die Stringdarstellung wird die Zeichenfolge‚Klasse‘oder‚Schnittstelle‘, gefolgt von einem Leerzeichen und dann durch die vollständig qualifizierten Namen der Klasse in dem Format zurückgegeben von getName“
I don erwarte dies nicht für primitive Typen. Es ist in Ordnung, wenn es für Arrays nicht funktioniert. Die Hauptsache, um die ich besorgt bin, sind verschachtelte Klassen und Foo.Bar
vs. Foo$Bar
.
Ich meine verschachtelt; Frage aktualisiert –