PACKAGE-INFO.JAVA 作用及用法詳解

來源:互聯網
上載者:User

標籤:不可   java   允許   組件   常量   很多   ide   inter   life   

package-info.java對於經常使用外部包的程式員來說應該是熟悉陌生人。因為不是專門開發包的程式員很少需要關注它,而又常在其他包中看到他,眼很熟。它到底有哪些特性和作用及如何使用呢?程式員講究動口不如動手,何不建立一個試試。開啟Eclipse,new class,哦!建立失敗,‘-’ 作為特殊字元不允許在類名稱裡出現,什麼情況。原來它本來就是個特例當然得用特別方法建立,記事本上,好了成功了。我喜歡追根問底,還什麼特殊的,google 吧,果然有先輩,轉過來收藏了。

原文地址:http://strong-life-126-com.iteye.com/blog/806246

特點:

  • 首先,它不能隨便被建立。在Eclipse中,package-info檔案不能隨便被建立,會報“Type name is notvalid”錯誤,類名無效,Java變數定義規範是:字母、數字、底線,還有那個不怎麼常用的$符號(順帶說下,Java是支援中文名稱的變數,習慣挑戰的同學可以嘗試下,分享一下這方面的經驗)。
  • 其次,服務的對象很特殊。一個類是一類或一組事物的描述,比如Dog這個類,就是描述旺財的,那package-info這個類是描述啥的呢?它總要有一個被描述或被陳述的對象,它是描述和記錄本包資訊。
  • 最後,類不能帶有public、private存取權限。package-info.java再怎麼特殊,也是一個類檔案,也會被編譯成package-info.class,但是在package-info.java中只能聲明預設存取權限的類,也就是友好類。

其實還有幾個特殊的地方,比如不可以繼承,沒有介面,沒有類間關係(關聯、組合、彙總等等)等。

這個檔案的特殊性說完了,那再說說它有什麼作用,它有三個作用:

  1. 為標註在包上Annotation提供便利;
  2. 聲明友好類和包常量;
  3. 提供包的整體注釋說明。

 我們來建立一個項目示範這三個作用,建立一個package-info的Java Project,在com.company包三個類:package-info.java是我們重點關注的,PkgAnnotation.java是一個標註在包上的註解定義,Client.java類比業務操作類。其結構如:


 

1,為標註在包上Annotation提供便利

     首先定義一個包類型的註解,它只能放置的一個包上:

Java代碼  

1   /** 2     * 定義只能標註在package上的註解 3     */  4     @Target(ElementType.PACKAGE)  5     @Retention(RetentionPolicy.RUNTIME)  6     public @interface PkgAnnotation {  7     } 

再定義一個package-info類,這個是一個特殊的類,先看代碼:

1 @PkgAnnotation  2 package com.company; 

很簡單,就這麼個檔案,裡面啥都沒有,就這兩句話,沒有class類,沒有常變數聲明。接著寫一個類比交易類,代碼如下

Java代碼:

 1  public class Client {      2         public static void main(String[] args) {   3             //可以通過I/O操作或配置項獲得包名   4             String pkgName = "com.company";        5             Package pkg = Package.getPackage(pkgName);   6             //獲得包上的註解   7             Annotation[] annotations = pkg.getAnnotations();   8             //遍曆註解數組   9             for(Annotation an:annotations){  10                 if(an instanceof PkgAnnotation){  11                     System.out.println("Hi,I‘m the PkgAnnotation");  12                     /* 13                      * 註解操作 14                      * MyAnnotation myAnn = (PkgAnnotation)an; 15                      * 還可以操作該註解包下的所有類,比如初始化,檢查等等 16                      * 類似Struts的@Namespace,可以放到包名上,標明一個包的namespace路徑 17                      */           18                 }  19             }  20         }  21     }  

運行結果如下所示:

Hi,I‘m the PkgAnnotation!

2,聲明友好類和包常量

     這個比較簡單,而且很實用,比如一個包中有很多的內部訪問的類或常量,就可以統一的放到package-info類中,這樣就方便,而且集中管理,減少friendly類到處遊走的情況,看例子:

Java代碼:

 1 @PkgAnnotation   2 package com.company;   3  //這裡是包類,聲明一個包使用的公用類,強調的是包存取權限   4 class PkgClass{   5     public void test(){   6     }   7 }   8 //包常量,只運行包內訪問,適用於分“包”開發   9 class PkgConst{  10     static final String PACAKGE_CONST="ABC";  11 }

 

3,提供包的整體注釋說明

     如果是分“包”開發,也就是說一個包實現一個商務邏輯或功能點、或模組、或組件,則需要對一個包有很好的說明,說明這個包是幹啥的,有啥作用,版本變遷,特別說明等等,如下:

Java代碼:

1   /** 2      * <b>package-info不是平常類,其作用有三個:</b><br> 3      * 1、為標註在包上Annotation提供便利;<br> 4      * 2、聲明包的私人類和常量;<br> 5      * 3、提供包的整體注釋說明。<br>  6     */  7     package com.company;   

通過javadoc產生的API文檔如下:


 

     這與包下放置package.htm沒啥區別,只是package-info可以更好的在代碼中維護文檔的完整性,並且可以實現代碼與文檔同步更新,package.htm也可以做到,不爭論,建議是Java 1.5以上版本都使用package-info.java來注釋。

     與package-info相關的問題

     在項目開發中,可以放置在包上的常用註解有:Struts的@namespace、Hibernate的@FilterDef和@TypeDef等等。在包下,隨便一個類中的包名前加這些註解,Eclipse會提示“Package annotations must be in file package-info.java”,在該包下建立package-info.java檔案,把註解移到這裡即可。

    使用Checkstyle外掛程式做代碼檢查時,會報一個警告“Missing package-info.java file.”也是這個package-info檔案惹的禍,在各個包下建立一個即可。

 

PACKAGE-INFO.JAVA 作用及用法詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.