chciałbym napisać trochę kodu:Która metoda java.lang.Class generuje właściwe wejście dla 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();
Jednak nie jest jasne, z javadoc której metody należy użyć do zainicjowania oTypeName
, tj która metoda przyniesie oczekiwane wejście do Class.forName()
:
getCanonicalName()
: „Zwraca kanoniczną nazwę podstawowej klasy zgodnie z definicją języka Java Specification Zwraca null, jeśli podstawowa klasa nie posiada kanoniczną nazwę (czyli czy jest to lokalna lub anonimowa klasa lub tablica, której składnikiem. type nie ma nazwy kanonicznej). "getName()
: "Zwraca nazwę obiektu (klasa, interfejs, klasa tablicy, typ pierwotny lub puste pole) reprezentowaną przez ten obiekt klasy jako łańcuch .Jeśli ten obiekt klasy reprezentuje typ odniesienia, który nie jest typem tablicy następnie zwracana jest nazwa binarna klasy, zgodnie ze specyfikacją języka Java ™. "getTypeName()
: "Zwróć napis informacyjny dla nazwy tego typu."
Jest dość oczywiste, że nie chcę żadnego z nich:
getSimpleName()
„Zwraca prostą nazwę klasy bazowej, jak podano w kodzie źródłowym”toString()
: „W reprezentacji ciąg jest ciąg«klasa»lub«interfejs», a następnie po spacji, a następnie w pełni kwalifikowaną nazwę klasy w formacie zwróconym przez getName”
I don Spodziewaj się, że to działa dla typów pierwotnych. Jest w porządku, jeśli nie zadziała dla tablic. Najważniejszą rzeczą, o którą się martwię, są zagnieżdżone klasy i Foo.Bar
vs. Foo$Bar
.
Mam na myśli zagnieżdżone; pytanie zaktualizowane –