2016-02-14 39 views
0

在Java 8中,我如何分層掃描包級別註釋(即package-info.java文件中的註釋)?Java 8:分層掃描包級別註釋

例如,我想找出Class<x.y.z.C>,被發現存在於以下包A類型的第一個批註,依次是:

  1. x.y.z
  2. x.y
  3. x
  4. (根包)

使用反射時,我可以撥打D.class.getPackage()獲取Package,x.y.z,我可以看到該包上的註釋。

但是沒有辦法從x.y.z(沒有Package#getParent()或等效方法)得到Packagex.y

我試過使用Package.getPackage("x.y"),但是這返回null

我還沒有得到該方法返回除null以外的任何東西。

我已經研究了思考,番石榴,ByteBuddy,快速類路徑掃描程序等,但仍找不到分層掃描包級別註釋的方法。

+0

如果沒有類在xy'不存在包'xy',然後包'定義......即使存在一個包'xyz'。一攬子計劃的存在並不意味着其父母的存在。 (例如,沒有名爲'java'的包。) – VGR

+0

我剛剛意識到了答案。請看下面。 – XDR

回答

0

我才意識到我可以做找到一個包註釋:

Class.forName("x.y.package-info").getAnnotations() 
+0

預計未來的Java版本會失敗。根據[Java Language Specification](http://docs.oracle.com/javase/specs/jls/se8/html/jls-7.html#jls-7.4.1),package-info不是合法標識符爲一個班級。它現在起作用的事實僅僅是一個意外。 – VGR

+0

有沒有更好的方式在Java 8中做到這一點? – XDR

+0

是:在該包中定義一個類,即使它只是一個空類。如果該目錄不包含至少一個類,則它不是一個包。 – VGR