<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

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲精品国产自在久久| 国产电影午夜成年免费视频| 国产jizzjizz免费视频| 亚洲欧美成人av在线观看| 免费看a级黄色片| 亚洲色成人四虎在线观看| 国产啪精品视频网免费| 国产成人亚洲合集青青草原精品| 97热久久免费频精品99| 77777午夜亚洲| 免费无码黄网站在线观看| 国产亚洲视频在线观看| 久久精品亚洲男人的天堂| a视频免费在线观看| 亚洲伦另类中文字幕| 99re免费在线视频| 亚洲人成伊人成综合网久久| 在线观看免费为成年视频| 日韩亚洲人成网站| 亚洲高清国产拍精品26U| 亚洲香蕉免费有线视频| 国产色爽免费视频| 免费大片av手机看片高清| 亚洲色成人中文字幕网站| 最近2019中文字幕免费大全5 | 久久亚洲精品中文字幕三区| 无码人妻一区二区三区免费n鬼沢| 久久精品国产亚洲AV麻豆网站| 国产卡一卡二卡三免费入口| 特级毛片A级毛片免费播放| 国产AV无码专区亚洲AVJULIA| 精品免费久久久久久久| 特级毛片全部免费播放a一级| 亚洲精品无码久久久久sm| 99久久免费国产精品特黄| 四虎国产精品永免费| 久久精品国产亚洲av麻豆色欲| 国产高清在线免费视频| 免费一区二区三区| 久久综合亚洲色hezyo| 久久亚洲精品成人|