<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系列
    主站蜘蛛池模板: 国产精品高清视亚洲一区二区 | 久久亚洲国产成人精品性色| yy一级毛片免费视频| 亚洲AV无码一区二区三区在线观看| 亚洲国产成人AV网站| 国产成人在线免费观看| 日本系列1页亚洲系列| 免费人成网站在线播放| 男人和女人高潮免费网站| 国产日韩成人亚洲丁香婷婷| 国产免费伦精品一区二区三区| 亚洲精品无码成人AAA片| 99精品在线免费观看| 亚洲一区二区三区不卡在线播放| 成人免费视频77777| 欧美激情综合亚洲一二区| 亚洲国产成人a精品不卡在线| 国产成人精品免费视频大全| 亚洲国产另类久久久精品| **一级一级毛片免费观看| 亚洲综合激情五月丁香六月| 四虎永久免费地址在线网站| 久久www免费人成看国产片| 亚洲天堂久久精品| 无码中文字幕av免费放| 色婷婷精品免费视频| 亚洲成AV人片在线观看ww| **实干一级毛片aa免费| 日韩国产欧美亚洲v片| 国产亚洲福利精品一区| 91香蕉视频免费| 一级成人a免费视频| 亚洲精品国产成人99久久| 四虎在线免费播放| 国产精品成人69XXX免费视频| 久久精品国产亚洲AV高清热| 日韩在线免费看网站| 国产亚洲免费的视频看| 亚洲砖码砖专无区2023| 亚洲精品美女久久久久99| 夭天干天天做天天免费看|