2013-07-07 30 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