<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 32,  comments - 149,  trackbacks - 0

    元數據的作用

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

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

    l         代碼分析:通過代碼里標識的元數據對代碼進行分析。

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

     

    基本內置注釋

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

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

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

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

    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 {

     

    }

     

    使用定制的注釋類型

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

    public class AnnotationTest {

     

        @NewAnnotation

        public static void main(String[] args) {

       

        }

    }

     

    添加變量

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

    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進行修改,看看它會變成什么樣子,不僅參數多了幾個,連類名也變了。但還是很容易理解的,我們先定義一個枚舉類型,然后將參數設置為該枚舉類型,并賦予默認值。

    public @interface Greeting {

     

        public enum FontColor {RED, GREEN, BLUE};

     

        String name();

     

        String content();

       

        FontColor fontColor() default FontColor.BLUE;

    }

     

    限定注釋使用范圍

        當我們的自定義注釋不斷的增多也比較復雜時,就會導致有些開發(fā)人員使用錯誤,主要表現(xiàn)在不該使用該注釋的地方使用。為此,Java提供了一個ElementType枚舉類型來控制每個注釋的使用范圍,比如說某些注釋只能用于普通方法,而不能用于構造函數等。下面是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注釋標注在普通方法和構造函數上,使用在包申明、類名等時,會提示錯誤信息。

     

    注釋保持性策略

    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 閱讀(598) 評論(0)  編輯  收藏 所屬分類: Java技術
    <2009年6月>
    31123456
    78910111213
    14151617181920
    21222324252627
    2829301234
    567891011

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

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    收藏夾

    DotNet

    Java技術網站

    Linux VS Unix

    其他常去網站

    常光顧的BLOG

    文學類網站

    游戲類網站

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 196774
    • 排名 - 293

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 两个人看的www高清免费视频| 亚洲中文字幕无码av永久| 乱人伦中文视频在线观看免费| 大学生一级特黄的免费大片视频| 精品久久亚洲中文无码| 国产人在线成免费视频| 亚洲伊人久久大香线蕉在观| 日韩在线免费视频| 亚洲一区在线视频| 精品国产精品久久一区免费式| 亚洲午夜无码毛片av久久京东热| 韩国二级毛片免费播放| 精品国产日韩亚洲一区91| 亚洲精品成人片在线观看| 久久久受www免费人成| 久久精品国产亚洲综合色| 久久成人a毛片免费观看网站| 久久亚洲日韩精品一区二区三区| 免费可以看黄的视频s色| 亚洲日本va在线观看| 日本黄页网站免费| 一级特级aaaa毛片免费观看 | 中文字幕亚洲电影| 亚洲免费观看视频| 亚洲一级片在线播放| 国产又粗又长又硬免费视频| 午夜不卡AV免费| 亚洲爆乳精品无码一区二区三区| 16女性下面扒开无遮挡免费| 日韩亚洲不卡在线视频中文字幕在线观看| 国产免费看插插插视频| 伊人免费在线观看| 亚洲人成电影在线观看网| 国产成人免费全部网站| 日本免费污片中国特一级| 亚洲欧洲免费无码| 亚洲精品成人无限看| 在线免费不卡视频| 久久精品视频免费| 香蕉视频免费在线| 亚洲第一页在线播放|