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

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

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

    Open Java Project

    Keep it simple, Stupid, Less is more

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      20 Posts :: 0 Stories :: 12 Comments :: 0 Trackbacks

    1、自定義Annotation類型

    1)定義Annotation類型

    l         使用@interface聲明Annotation類型

    public @interface InProgress {
     
    }

    l         使用Annotation類型

    public class TestAnnotation {
           @InProcess
           public void test() {
             
           }
    }

    l         如果Annotation類型和使用它的類不在相同的包中,可以import Annotation類型,以便直接使用 @InProgress

    2)添加成員

    l         Annotation類型可以有成員變量,以提供有用的信息

    l         定義數據成員不需要定義gettersetter方法,只需要定義一個以成員名稱命名的方法,并指定返回類型為需要的數據類型

    l         簡單的例子:

    public @interface TODO {
           String value();
    }

    l         使用帶成員的Annotation類型:

    public class TestAnnotation {
           @InProcess
           @TODO("Need to finish this method later")
           public void test() {
             
           }
    }

    3)設置缺省值

    l         要為Annotation類型的成員設置缺省值,需要在聲明成員時使用default關鍵字:

    public @interface GroupTODO {
           public enum Severity {
                  CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION
           };
     
           Severity severity() default Severity.IMPORTANT;
           String item();
           String assignedTo();
           String dateAssigned();
    }

    l         當然,缺省值的類型必須與成員變量聲明的類型完全相同

    l         下面是使用缺省值的例子:

    public class TestAnnotation {
           @InProcess
           @GroupTODO(
                  item="Need to finish this method later",
                  assignedTo="nelson_tu",
                  dateAssigned="2005/02/05"
           )
           public void test() {
             
           }
    }

    l         下面是改寫缺省值的例子:

    public class TestAnnotation {
           @InProcess
           //@TODO("Need to finish this method later")
           @GroupTODO(
                  severity=GroupTODO.Severity.DOCUMENTATION,
                  item="Need to finish this method later",
                  assignedTo="nelson_tu",
                  dateAssigned="2005/02/05"
           )
           public void test() {
             
           }
    }

     

    2、元Annotation

    l         Annotation就是AnnotationAnnotationJDK5提供了4種預定義的元Annotation

    1@Target

    l         @Target指定Annotation類型可以應用的程序元素,以便在其它程序元素中誤用Annotation類型

    l         程序元素的類型由java.lang.annotation.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
    }

    l         下面是使用@Target的例子:

    @Target({ElementType.TYPE,
        ElementType.METHOD,
        ElementType.CONSTRUCTOR,
        ElementType.ANNOTATION_TYPE})
    public @interface TODO {
           String value();
    }

    2@Retention

    l         @Retention Java 編譯器處理Annotation類型的方式有關

    l         這些方式由java.lang.annotation.RetentionPolicy 枚舉類定義:

    package java.lang.annotation;
     
    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
    }

    l         使用@Retention的例子參看后面的@Documented

    3@Documented

    l         @Documented指明需要在Javadoc中包含Annotation(缺省是不包含的)

    l         下面是一個使用@Documented的例子:

    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    public @interface InProcess {
     
    }

    l         使用@Documented的一個技巧就是指定保持性策略為RetentionPolicy.RUNTIME:這樣,Annotation就會保留在編譯后的類文件中并且由虛擬機加載,然后Javadoc就可以抽取出Annotation,添加到類的HTML文檔中

    4@Inherited

    l         @Inherited最復雜、使用最少、也最容易造成混淆的一個

    l         假設使用@InProgress 標記一個正在開發的類,只要正確應用@DocumentedAnnotation信息就會出現在Javadoc中;現在要編寫一個新類,擴展那個正在開發的類,那么使用子類,或者查看它的文檔,根本沒法表明還有什么地方沒有完成;而本來是希望@InProgress Annotation信息會被帶到子類中,這就需要使用@Inherited

    l         下面是這樣的例子:

    @Documented
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    public @interface InProcess {
     
    }
    posted on 2005-03-21 22:02 nelson_tu 閱讀(1124) 評論(0)  編輯  收藏 所屬分類: Tiger系列
    主站蜘蛛池模板: 精品国产呦系列在线观看免费| 精品丝袜国产自在线拍亚洲| 7777久久亚洲中文字幕蜜桃| 久久久亚洲裙底偷窥综合| 亚洲欧洲自拍拍偷午夜色| 亚洲愉拍一区二区三区| 亚洲AV无码成人精品区日韩| 色多多A级毛片免费看| 麻豆精品成人免费国产片| 亚洲成人免费网址| 男女啪啪永久免费观看网站| 亚洲精品无码AV中文字幕电影网站| 亚洲精品无码乱码成人| 亚洲妓女综合网99| 国产成人亚洲精品播放器下载| 男女拍拍拍免费视频网站| 99xxoo视频在线永久免费观看| 大学生一级特黄的免费大片视频| 亚洲精品高清在线| 亚洲第一区香蕉_国产a| 亚洲色成人网站WWW永久四虎| kk4kk免费视频毛片| h视频在线观看免费完整版| 日日操夜夜操免费视频| 情人伊人久久综合亚洲| 亚洲欧洲日韩极速播放| 国产又黄又爽又大的免费视频| 三年片在线观看免费大全| 亚洲精品tv久久久久久久久久| 亚洲日产2021三区| 无码免费又爽又高潮喷水的视频| 亚洲一区免费在线观看| 亚洲国产精品第一区二区三区| 亚洲精品不卡视频| 一级特级女人18毛片免费视频 | 精品久久香蕉国产线看观看亚洲| 色婷婷六月亚洲婷婷丁香| 亚洲人av高清无码| 亚洲色成人四虎在线观看| 三年片在线观看免费西瓜视频| 亚洲免费福利视频|