posts - 32,  comments - 149,  trackbacks - 0

          元數(shù)據(jù)的作用

          如果要對于元數(shù)據(jù)的作用進行分類,目前還沒有明確的定義,不過我們可以根據(jù)它所起的作用,大致可分為三類:

          l         編寫文檔:通過代碼里標識的元數(shù)據(jù)生成文檔。

          l         代碼分析:通過代碼里標識的元數(shù)據(jù)對代碼進行分析。

          l         編譯檢查:通過代碼里標識的元數(shù)據(jù)讓編譯器能實現(xiàn)基本的編譯檢查。

           

          基本內(nèi)置注釋

              @Override注釋能實現(xiàn)編譯時檢查,你可以為你的方法添加該注釋,以聲明該方法是用于覆蓋父類中的方法。如果該方法不是覆蓋父類的方法,將會在編譯時報錯。例如我們?yōu)槟愁愔貙?span>toString()方法卻寫成了tostring(),并且我們?yōu)樵摲椒ㄌ砑恿?#64;Override注釋;

               @Deprecated的作用是對不應該在使用的方法添加注釋,當編程人員使用這些方法時,將會在編譯時顯示提示信息,它與javadoc里的@deprecated標記有相同的功能,準確的說,它還不如javadoc @deprecated,因為它不支持參數(shù),

          注意:要了解詳細信息,請使用 -Xlint:deprecation 重新編譯。

              @SuppressWarnings與前兩個注釋有所不同,你需要添加一個參數(shù)才能正確使用,這些參數(shù)值都是已經(jīng)定義好了的,我們選擇性的使用就好了,參數(shù)如下:

          deprecation   使用了過時的類或方法時的警告

          unchecked 執(zhí)行了未檢查的轉換時的警告,例如當使用集合時沒有用泛型 (Generics) 來指定集合保存的類型

          fallthrough   當 Switch 程序塊直接通往下一種情況而沒有 Break 時的警告

          path   在類路徑、源文件路徑等中有不存在的路徑時的警告

          serial當在可序列化的類上缺少 serialVersionUID 定義時的警告

          finally    任何 finally 子句不能正常完成時的警告

          all關于以上所有情況的警告

          注意:要了解詳細信息,請使用 -Xlint:unchecked 重新編譯。

           

          定制注釋類型

              好的,讓我們創(chuàng)建一個自己的注釋類型(annotation type)吧。它類似于新創(chuàng)建一個接口類文件,但為了區(qū)分,我們需要將它聲明為@interface,如下例:

          public @interface NewAnnotation {

           

          }

           

          使用定制的注釋類型

              我們已經(jīng)成功地創(chuàng)建好一個注釋類型NewAnnotation,現(xiàn)在讓我們來嘗試使用它吧,如果你還記得本文的第一部分,那你應該知道他是一個標記注釋,使用也很容易,如下例:

          public class AnnotationTest {

           

              @NewAnnotation

              public static void main(String[] args) {

             

              }

          }

           

          添加變量

              J2SE 5.0里,我們了解到內(nèi)置注釋@SuppressWarnings()是可以使用參數(shù)的,那么自定義注釋能不能定義參數(shù)個數(shù)和類型呢?答案是當然可以,但參數(shù)類型只允許為基本類型、String、Class、枚舉類型等,并且參數(shù)不能為空。我們來擴展NewAnnotation,為之添加一個String類型的參數(shù),示例代碼如下:

          public @interface NewAnnotation {

           

              String value();

          }

              使用該注釋的代碼如下:正如你所看到的,該注釋的使用有兩種寫法,這也是在之前的文章里所提到過的。如果你忘了這是怎么回事,那就再去翻翻吧。

          public class AnnotationTest {

           

              @NewAnnotation("Just a Test.")

              public static void main(String[] args) {

                  sayHello();

              }

             

              @NewAnnotation(value="Hello NUMEN.")

              public static void sayHello() {

                  // do something

              }

          }

           

          為變量賦默認值

              我們對Java自定義注釋的了解正在不斷的增多,不過我們還需要更過,在該條目里我們將了解到如何為變量設置默認值,我們再對NewAnnotaion進行修改,看看它會變成什么樣子,不僅參數(shù)多了幾個,連類名也變了。但還是很容易理解的,我們先定義一個枚舉類型,然后將參數(shù)設置為該枚舉類型,并賦予默認值。

          public @interface Greeting {

           

              public enum FontColor {RED, GREEN, BLUE};

           

              String name();

           

              String content();

             

              FontColor fontColor() default FontColor.BLUE;

          }

           

          限定注釋使用范圍

              當我們的自定義注釋不斷的增多也比較復雜時,就會導致有些開發(fā)人員使用錯誤,主要表現(xiàn)在不該使用該注釋的地方使用。為此,Java提供了一個ElementType枚舉類型來控制每個注釋的使用范圍,比如說某些注釋只能用于普通方法,而不能用于構造函數(shù)等。下面是Java定義的ElementType枚舉:

          package java.lang.annotation;

           

          public enum ElementType {

            TYPE,         // Class, interface, or enum (but not annotation)

            FIELD,        // Field (including enumerated values)

            METHOD,       // Method (does not include constructors)

            PARAMETER,        // Method parameter

            CONSTRUCTOR,      // Constructor

            LOCAL_VARIABLE,   // Local variable or catch clause

            ANNOTATION_TYPE,  // Annotation Types (meta-annotations)

            PACKAGE       // Java package

          }

              下面我們來修改Greeting注釋,為之添加限定范圍的語句,這里我們稱它為目標(Target)使用方法也很簡單,如下:

          @Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })

          public @interface Greeting {

          }

          正如上面代碼所展示的,我們只允許Greeting注釋標注在普通方法和構造函數(shù)上,使用在包申明、類名等時,會提示錯誤信息。

           

          注釋保持性策略

          public enum RetentionPolicy {

            SOURCE,// Annotation is discarded by the compiler

            CLASS,// Annotation is stored in the class file, but ignored by the VM

            RUNTIME// Annotation is stored in the class file and read by the VM

          }

              RetentionPolicy的使用方法與ElementType類似,簡單代碼示例如下:

          @Retention(RetentionPolicy.RUNTIME)

          @Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })

          文檔化功能

              Java提供的Documented元注釋跟Javadoc的作用是差不多的,其實它存在的好處是開發(fā)人員可以定制Javadoc不支持的文檔屬性,并在開發(fā)中應用。它的使用跟前兩個也是一樣的,簡單代碼示例如下:

          @Documented

          @Retention(RetentionPolicy.RUNTIME)

          @Target( { ElementType.METHOD, ElementType.CONSTRUCTOR })

          public @interface Greeting {

          }

           

          值得大家注意的是,如果你要使用@Documented元注釋,你就得為該注釋設置RetentionPolicy.RUNTIME保持性策略。

          后續(xù)補充中....

          posted on 2009-06-19 10:30 chunkyo 閱讀(602) 評論(0)  編輯  收藏 所屬分類: Java技術
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          這個博客主要是關于java技術和開源技術,大家一起來進步了!

          常用鏈接

          留言簿(12)

          隨筆分類

          隨筆檔案

          文章分類

          收藏夾

          DotNet

          Java技術網(wǎng)站

          Linux VS Unix

          其他常去網(wǎng)站

          常光顧的BLOG

          文學類網(wǎng)站

          游戲類網(wǎng)站

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 196862
          • 排名 - 293

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 英山县| 兴义市| 香河县| 东丰县| 新郑市| 尤溪县| 拉孜县| 西畴县| 略阳县| 江永县| 隆回县| 民权县| 巴彦淖尔市| 新泰市| 顺平县| 资源县| 上虞市| 兴业县| 论坛| 滕州市| 武威市| 东辽县| 忻城县| 个旧市| 南宫市| 峡江县| 工布江达县| 阳山县| 桐梓县| 玉树县| 西吉县| 房山区| 满城县| 农安县| 抚远县| 冀州市| 旬阳县| 徐闻县| 永安市| 化隆| 涟源市|