2012-06-12 10 views
14

Ho alcune classi A, B, C nel pacchetto com.abcPackage.getPackage in java ritorno nullo

Ho una classe principale nel pacchetto com.pqr

Ora voglio creare un oggetto del pacchetto del precedente pacakge (abc).

Per questo ho provato,

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

Ma quando lo faccio,

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

Qualcuno può informare, perché Package.getPackage ("package-name") non funziona?

+0

Provare il nome del pacchetto completo ** in cui ** vengono trovate le classi. –

+0

Questo è il mio nome completo. All'interno del mio progetto ho creato pacchetti con il nome di com.abc e com.pqr, dare un esempio di quale dovrebbe essere il nome completo in questo caso. – AurA

risposta

21

Package.getPackage restituirà un valore non null solo se il ClassLoader corrente è già a conoscenza del pacchetto. Prova questo:

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

La prima System.out stamperà 'null', il secondo stamperà il nome del pacchetto come il ClassLoader ha poi caricato una classe da esso.

+1

Si è corretto, ma voglio chiedere se c'è un altro modo per caricare il pacchetto tramite nome senza Classe . Voglio dire, supponiamo di non sapere quale classe ci sia nel pacchetto. – AurA

+1

Dovresti trovare alcune informazioni utili in [questa domanda] (http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection). La libreria Reflections sembra che potrebbe fare ciò che vuoi. –