<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         編譯檢查:通過代碼里標識的元數據讓編譯器能實現基本的編譯檢查。

     

    基本內置注釋

        @Override注釋能實現編譯時檢查,你可以為你的方法添加該注釋,以聲明該方法是用于覆蓋父類中的方法。如果該方法不是覆蓋父類的方法,將會在編譯時報錯。例如我們?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,現在讓我們來嘗試使用它吧,如果你還記得本文的第一部分,那你應該知道他是一個標記注釋,使用也很容易,如下例:

    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ā)人員使用錯誤,主要表現在不該使用該注釋的地方使用。為此,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

    文學類網站

    游戲類網站

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 196749
    • 排名 - 293

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av成人片在线观看| 亚洲偷自精品三十六区| 一级中文字幕免费乱码专区 | 亚洲永久中文字幕在线| 国产一级片免费看| 亚洲av一综合av一区| 成人无码a级毛片免费| 亚洲av午夜福利精品一区| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲乱码在线观看| 好吊妞998视频免费观看在线| 亚洲一区二区三区国产精华液| 免费黄色网址入口| 立即播放免费毛片一级| 亚洲AV无码之日韩精品| 亚洲日韩在线观看免费视频| 国产亚洲午夜高清国产拍精品| a在线视频免费观看| 免费一级特黄特色大片在线观看 | 亚洲一区二区中文| 一个人免费观看视频www| 无码一区二区三区亚洲人妻 | 亚洲av无码乱码国产精品| 四虎国产成人永久精品免费 | 亚洲人成免费电影| 日韩免费在线观看| 中文在线观看永久免费| 亚洲黄色网站视频| 国产一级特黄高清免费大片| 丝袜捆绑调教视频免费区| 亚洲国产日韩女人aaaaaa毛片在线| 麻豆成人精品国产免费| 一个人看的免费视频www在线高清动漫 | 成人精品一区二区三区不卡免费看| 337p日本欧洲亚洲大胆色噜噜| 女人18毛片水真多免费播放| 一区二区视频免费观看| 亚洲av永久无码嘿嘿嘿| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 日本XXX黄区免费看| 青青青视频免费观看|