2012-09-05 12 views
7

Chcę wydrukować wszystkie nazwy klas w pakiecie, a także wydrukować odpowiednie atrybuty i ich typy danych w każdym pakiecie.Jak przekonwertować typ ciągu na typ klasy w java

W jednym kodzie, jestem w stanie uzyskać nazwy klas w postaci ciągu znaków. W innym kodzie jestem w stanie uzyskać atrybuty i ich typy danych za pomocą Classname.class.getAttribute();

Jednak chcę scalić oba kody. Ponieważ w pierwszym kodzie otrzymałem nazwy klas w postaci ciągu, nie mogę użyć Classname.class.getAttribute(), ponieważ tutaj Classname będzie typu String.

Tak więc chcę metodę, która przekształci nazwę "Classname" z String na typ Class.

Próbowałem Class.forName(), ale to nie zadziałało.

+6

Proszę podać, w jaki sposób Class.forName() "nie działało." – skiphoppy

+3

Jeśli Class.forName() nie działa, jest bardzo prawdopodobne, że a) nazwa klasy jest nieprawidłowa b) otrzymałeś komunikat o błędzie, ale nie wiesz, co to znaczy, więc zignorowałeś to. ;) –

+1

Poinformuj o błędzie! i opublikuj kod, w którym próbowałeś użyć 'Class.forName()' –

Odpowiedz

16
Class<?> classType = Class.forName(className); 

Upewnij className jest w pełni kwalifikowana nazwa klasy jak com.package.class Także, proszę podzielić się komunikat o błędzie, który widzisz.

+0

Tak, nazwa klasy nie była w pełni kwalifikowana. Po podaniu pełnej nazwy, zadziałało :) Dzięki :) –

1

Jeśli dostępna jest pełna nazwa klasy, możliwe jest uzyskanie odpowiedniej klasy za pomocą statycznej metody Class.forName().

Np

Class c = Class.forName("com.duke.MyLocaleServiceProvider"); 

Uwaga: Upewnij się, że parametr podać do funkcji jest w pełni kwalifikowana nazwa klasy jak com.package.class

Check here jakiegokolwiek odniesienia.

EDIT:

Można też spróbować użyć loadClass() metody.

Np

ClassLoader cl; 
Class c = cl.loadClass(name); 

Jest wywoływana przez maszynę wirtualną Java, aby rozwiązać odwołania klasy.

Składnia:

public Class<?> loadClass(String name) 
        throws ClassNotFoundException 

For details on ClassLoader check here

Here jest implementacją ClassLoader.

0

Proszę postąpić w następujący sposób.

String str = "RequiredClassName";  
Class <?> Cref = Class .forName("PackageNaem."+str); 
Powiązane problemy