【发布时间】:2013-07-05 03:27:51
【问题描述】:
在我当前的项目中,我想将一些配置数据存储在包注释中,并由一些 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() 作为第一条语句,我可以访问包信息。不知何故,我必须先访问包的内容,然后才能访问包信息本身。这是有道理的,否则类加载器必须在启动时扫描整个类路径。
但是,有没有一种简单的方法可以在不访问包内容的情况下访问包信息?我知道我可以使用像 reflections 这样的框架,但“轻量级”解决方案将是我的首选解决方案。
【问题讨论】:
标签: java reflection package classloader