2013-07-07 31 views
0

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

到目前为止这么好。不幸的是,似乎只有在第一次访问其中一个类或接口后,我才能通过Package.getPackage("my.package")访问现有的包。

下面的例子说明了这种行为:在包

a.b

package a.b; 

public class ClassInMitte { 
} 

例PROGRAMM访问包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()作为第一条语句,我可以访问包信息。不知何故,我必须访问包的内容才能访问包信息本身。这是有道理的,否则类加载器必须在启动时扫描整个类路径。

但是netherless是否有一种简单的方法来访问包信息,而无需访问包的内容?我知道我可以使用像reflections这样的框架,但“轻量级”解决方案将是我的首选解决方案。

回答

1

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

+0

根据API文档,如果包的内容被访问,包将被隐式创建。我会看看反射库提供的可能性。 – Oliver