2012-06-12 14 views
14

que tienen algunas clases A, B, C en com.abc paquetePackage.getPackage en Java volver nula

que tengo una clase principal en com.pqr paquete

Ahora quieren crear un objeto de paquete del pacakge anterior (abc).

Para esto he intentado,

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

Pero cuando lo haga,

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

¿Alguien puede notificar, ¿Por Package.getPackage ("nombre-paquete") no está funcionando?

+0

Pruebe el nombre completo del paquete ** donde ** se encuentran las clases. –

+0

Este es mi nombre completo. Dentro de mi proyecto creé paquetes con el nombre de com.abc y com.pqr, dando ejemplo de lo que debería ser el nombre completo en este caso. – AurA

Respuesta

21

Package.getPackage solo devolverá un valor no nulo si el ClassLoader actual ya conoce el paquete. Prueba esto:

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 primera System.out imprimirá 'nulo', el segundo se imprimirá el nombre del paquete como el cargador de clases entonces ha cargado una clase de ella.

+1

Tiene razón, pero quiero preguntar si hay alguna otra forma de cargar el paquete por nombre sin Clase . Quiero decir, supongamos que no sabemos qué clase hay en el paquete. – AurA

+1

Debería encontrar información útil en [esta pregunta] (http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-apackage-using-reflection). La Biblioteca Reflections parece que podría hacer lo que quieras. –

Cuestiones relacionadas