返回null的java中的Package.getPackage

Aur*_*urA 16 java reflection packages

我在com.abc包中有一些类A,B,C

我在com.pqr包中有一个Class Main

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

为此,我试过,

Package pkg = Package.getPackage("com.abc");   // This gives me null object in pkg
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

Package pkg = A.class.getPackage();    // It works fine
Run Code Online (Sandbox Code Playgroud)

任何人都可以通知,为什么Package.getPackage("package-name")不起作用?

Nic*_*son 22

如果当前的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);
Run Code Online (Sandbox Code Playgroud)

第一个System.out将打印'null',第二个将打印包名称,因为ClassLoader然后从中加载了一个类.

  • 您是正确的,但是我想问问是否还有其他方法可以通过名称而不使用Class &lt;T&gt;来加载软件包。我的意思是假设我们不知道包中有什么类。 (2认同)