2012-06-12 11 views
14

mam niektóre klasy A, B, C w opakowaniu com.abcPackage.getPackage w java powrocie zerowy

Mam klasy Main w opakowaniu com.pqr

Teraz chcę utworzyć obiekt pakietów poprzedniego pacakge (abc).

Do tego próbowałem,

Package pkg = Package.getPackage("com.abc"); // This gives me null object in pkg 

Ale kiedy zrobić,

Package pkg = A.class.getPackage(); // It works fine 

ktoś może powiadomić Dlaczego Package.getPackage ("nazwa-pakietu") nie działa?

+0

Wypróbuj w pełni kwalifikowaną nazwę pakietu ** gdzie ** znalezione klasy. –

+0

To jest moje pełne imię i nazwisko. Wewnątrz mojego projektu stworzyłem paczki o nazwie com.abc i com.pqr, podaj przykład tego, co powinno być w pełni kwalifikowaną nazwą w tym przypadku. – AurA

Odpowiedz

21

Package.getPackage zwróci wartość inną niż null, jeśli aktualna ClassLoader jest już znana z pakietu. Spróbuj tego:

Package pkg = Package.getPackage("com.abc"); 
System.out.println(pkg); 
Class<A> a = A.class; 
pkg = Package.getPackage("com.abc"); 
System.out.println(pkg); 

Pierwszy System.out wypisze „null”, drugi wypisze nazwę pakietu jako ClassLoader został następnie załadowany klasę od niego.

+1

Masz rację, ale chcę zapytać, czy istnieje jakikolwiek inny sposób załadowania pakietu przez nazwę bez klasy . Chodzi mi o to, że nie wiemy, jaka klasa znajduje się w paczce. – AurA

+1

Powinieneś znaleźć przydatne informacje w [to pytanie] (http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection). Biblioteka Reflections wygląda tak, jakby mogła zrobić to, co chcesz. –