0

在我当前的项目中,我想将一些配置数据存储在包注释中,并由一些 CDI 生产者访问。如果在当前包中找不到注释,则生产者将在包层次结构中向上搜索。

到目前为止,一切都很好。Package.getPackage("my.package")不幸的是,似乎只有在第一次访问它的一个类或接口之后,我才能访问现有的包。

以下示例说明了这种行为:

包中的类a.b

package a.b;

public class ClassInMitte {
}

访问包的示例程序oben.mitte

package other;

public class Refl {
    public static void main(String[] args)
    {
        Package viaName = Package.getPackage("a.b");

        System.out.println(viaName.getName());
        System.out.println(viaName.hashCode());
    }
}

运行Refl结果为NullPointerException. 但是,如果我添加new ClassInMitte()为第一条语句,我可以访问包信息。不知何故,我必须先访问包的内容,然后才能访问包信息本身。这是有道理的,否则类加载器必须在启动时扫描整个类路径。

但是,有没有一种简单的方法可以在不访问包内容的情况下访问包信息?我知道我可以使用反射之类的框架,但“轻量级”解决方案将是我的首选解决方案。

4

1 回答 1

1

Package.getPackage只返回当前类加载器已知的包,唯一的方法是从该包中加载一个类。它基本上是ClassLoader.getPackage.

于 2013-07-07T20:08:04.510 回答