【问题标题】:Package.getPackage in java returning nulljava中的Package.getPackage返回null
【发布时间】:2023-03-19 17:43:02
【问题描述】:

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

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

现在我想创建一个之前的 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("package-name") 不起作用?

【问题讨论】:

  • 尝试完全限定的包名在哪里找到类。
  • 这是我的全名。在我的项目中,我创建了名为 com.abc 和 com.pqr 的包,举例说明在这种情况下应该是什么完全限定的名称。

标签: java reflection packages


【解决方案1】:

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

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 将打印“null”,第二个将打印包名,因为 ClassLoader 已从中加载了一个类。

【讨论】:

  • 你是对的,但我想问一下是否有任何其他方法可以通过没有 Class 的名称加载包。我的意思是假设我们不知道包中有什么类。
  • 您应该在this question 中找到一些有用的信息。反射库看起来可以做你想做的事。
猜你喜欢
  • 2015-06-04
  • 2019-08-25
  • 2016-05-28
  • 2016-03-08
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多