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

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

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

    軟件工程實踐者

    統計

    留言簿

    友情鏈結

    閱讀排行榜

    評論排行榜

    如何編寫子定義annotation及使用JDK5.0 annotation包中的annotations

    這一小節介紹如何編寫一個自定義的注解類型,以及如何應用JDK5.0 java.lang.annotation包中提供的4種注解:
    @Documented,@Retention,@Target,@Inherited

    1. 編寫自定義@Todo注解
    經常我們在寫程序時,有時候有些功能在當前的版本中并不提供,或由于某些其它原因,有些方法沒有完成,而留待以后完成,我們在javadoc中用@TODO來描述這一行為,下面用java注解來實現。

    public @interface Todo { } // Todo.java

    如果你想讓這個注解類型能夠自省的話,給它加上@Todo注解,寫法如下:

    @Todo
    public @interface Todo{ }


    下面我們給這個注解接受參數的能力,代碼如下:
    @Todo("Just articleware")
    public @interface Todo{
      public enum Priority { LOW, MEDIUM, HIGH }
      String value();
      String[] owners() default "";
      Priority priority() default Priority.MEDIUM;
    }

    注意注解類性所能接受的參數類型有著嚴格的規則:
    a. 參數類型只能是:primitive, String, Class, enum, annotation, 或者是數組;
    b. 參數值不能為空,因此每一個參數值都要定義一個缺省值;
    c. 名字為value的參數可以用簡便的方法來設置;
    d. 參數的寫法如同寫簡單方法(看如上代碼),不允許加入參數,不允許有throws子句等。

    在上面的代碼中,我們為@Todo定義了3個參數, 分別是value, owners, priority. 注意:由于value的特殊性,它的的卻省值可以由上面代碼中的"Just articleware"來定義,當然你也可以單獨寫一個缺省值。

    下面看一個應用@Todo注解的例子:
    @Todo(
      value="Class scope",
      priority=Unfinished.Priority.LOW
    )
    public class TodoDemo {
    
      @Todo("Constructor scope")//通過快捷方式,設置value的值
      public TodoDemo() { }
    
      @Todo(owner="Jason", value="Method scope")
      public void foo() { }
    }

    上面的代碼很簡單,不多介紹。

    下面我們想讓@Todo不能應用在fields, parameters, 或者local variables(因為這對我們來說沒有意義);它應當可以出現在javadoc中;在運行是具有持久性。要實現這些特性,就需要annotation包的支持啦。

    2. 應用annotation包的支持

    1)@Documented
    類和方法的annotation缺省情況下是不出現在javadoc中的,為了加入這個性質我們用@Documented
    應用代碼如下(簡單,不多介紹):
    package com.robin;
    import java.lang.annotation.*;
    
    @Todo("Just articleware")
    @Documented
    public @interface Todo{ ...
    


    2)@Retention
    用來表明你的annotation的有效期,可以有三種選擇(如圖所示):

    以下示例代碼應用RUNTIME策略
    package com.robin;
    import java.lang.annotation.*;
    
    @Todo("Just articleware")
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Todo{ ...

    3) @Target
    @Target注解表明某個注解應用在哪些目標上,可選擇如下范圍:
    • ElementType.TYPE (class, interface, enum)
    • ElementType.FIELD (instance variable)
    • ElementType.METHOD ElementType.PARAMETER
    • ElementType.CONSTRUCTOR
    • ElementType.LOCAL_VARIABLE
    • ElementType.ANNOTATION_TYPE (應用于另一個注解上)
    • ElementType.PACKAGE

    按我們的功能要求,代碼如下:
    package com.robin;
    import java.lang.annotation.*;
    
    @Todo("Just articleware")
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE,ElementType.METHOD,
     ElementType.CONSTRUCTOR,ElementType.ANNOTATION_TYPE,
     ElementType.PACKAGE})
    public @interface Todo{ ...

    4) @Inherited
    @Inherited表明是否一個使用某個annotation的父類可以讓此annotation應用于子類。
    示例代碼如下:
    package com.robin;
    import java.lang.annotation.*;
    
    @Todo("Just articleware")
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.TYPE,ElementType.METHOD,
     ElementType.CONSTRUCTOR,ElementType.ANNOTATION_TYPE,
     ElementType.PACKAGE})
    @Inherited
    public @interface Todo{
      public enum Priority { LOW, MEDIUM, HIGH }
    
      String value();
      String[] owners() default "";
      Priority priority() default Priority.MEDIUM;
    }

    posted on 2006-01-02 10:31 軟件工程實踐者 閱讀(1214) 評論(0)  編輯  收藏 所屬分類: Java Domain

    主站蜘蛛池模板: 亚洲精品无码久久千人斩| mm1313亚洲精品无码又大又粗 | 国产在线19禁免费观看| 亚洲中文字幕久久无码| 四虎成人精品一区二区免费网站| 亚洲视频一区二区三区四区| 成全视频免费高清| 亚洲av午夜国产精品无码中文字| 国产免费啪嗒啪嗒视频看看| 粉色视频免费入口| 亚洲综合av永久无码精品一区二区 | 亚洲日本国产精华液| 无码国产精品一区二区免费| 亚洲三级在线播放| 宅男666在线永久免费观看| 国产亚洲男人的天堂在线观看| 亚洲国产精品成人AV无码久久综合影院| 粉色视频在线观看www免费| 在线A亚洲老鸭窝天堂| 18禁超污无遮挡无码免费网站 | 亚洲欧洲专线一区| 免费一级毛片正在播放| 精品人妻系列无码人妻免费视频| 久久亚洲国产精品| 成人免费一区二区无码视频| 国产91成人精品亚洲精品| 亚洲精品亚洲人成人网| 99re热免费精品视频观看| 国产成人人综合亚洲欧美丁香花| 亚洲尤码不卡AV麻豆| 天天影院成人免费观看| 国产精品亚洲综合网站| 久热综合在线亚洲精品| 免费无码看av的网站| 最近免费中文字幕中文高清| 亚洲国产电影在线观看| 国产黄色一级毛片亚洲黄片大全| 精品一区二区三区无码免费视频| 亚洲av永久无码一区二区三区| 国产精品亚洲аv无码播放| 免费av欧美国产在钱|