2012-06-12 51 views
14

我有一些类A,B,C中包com.abcPackage.getPackage在Java返回null

我有一类主要在包com.pqr

现在我想创建一个包对象以前的pacakge(abc)。

对于这个我试过,

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

但是,当我这样做,

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

谁能通知,为什么Package.getPackage( “包名”)不工作?

+0

尝试使用完全限定的软件包名称**其中找到类。 –

+0

这是我的完全限定名。在我的项目中,我通过com.abc和com.pqr的名称创建了包,给出了在这种情况下应该是完全限定名的例子。 – AurA

回答

21

如果当前ClassLoader已经知道该包,Package.getPackage将只返回一个非null值。试试这个:

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

第一的System.out将打印“空”,第二个将打印包名作为类加载器已经然后从它加载的类。

+1

你是对的,但我想问问是否有任何其他方式通过没有类的名称加载包。我的意思是假设我们不知道包中有什么类。 – AurA

+1

你应该在[这个问题]中找到一些有用的信息(http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection)。反射库看起来可能会做你想要的。 –