posts - 1,  comments - 0,  trackbacks - 0

          JAVA從J2SE5開始提供名為annotation(注釋,標(biāo)注)的功能。Java的annotation,可以附加在package, class, method, field等上面,相當(dāng)于給它們添加了額外的輔助信息。附加在package, class, method, field等上的Annotation,如果沒有外部解析工具等對其加以解析和處理的情況,本身不會對Java的源代碼或class等產(chǎn)生任何影響,也不會對它們的執(zhí)行產(chǎn)生任何影響。

          但借助外部工具,比如javac,EJB容器等,可以對附加在package, class, method, field的annotation進(jìn)行解析,可以根據(jù)annotation而做出相應(yīng)的處理,比如運(yùn)行時(shí)改變對象/方法的行為。


          Java標(biāo)準(zhǔn)Annotation
          @Deprecated 相當(dāng)于Javadoc的@deprecated,被@Deprecated標(biāo)注的對象class, method等被注明為不推薦使用。主要用于javac等編譯工具。
          @Override 注明對象method重載了父類的方法。javac等編譯工具編譯時(shí)會根據(jù)此Annotation判斷重載方法是否正確。
          @SuppressWarnings 告訴javac等編譯器忽略所指定的特定的警告信息。
          @Target 被定義的annotation可以附加在那些對象上。
          @Retention annotation的作用期間。
          Java標(biāo)準(zhǔn)Annotation的使用
          @Deprecated:
          @Deprecated
          public class TestBean {
              …
          }
          @SuppressWarnings
          @SuppressWarnings("serial")
          public class TestBean implements java.io.Serializable {
              …
          }

          @SuppressWarnings(value = {"serial", "unchecked"})
          public String doSth() {
              …
          }

          @Override
          @Override
          public String doSth() {
              …
          }


          Annotation的定義
          定義方法:
          @interface Annotation名 {定義體}

          定義例1:
          public @interface MyAnnotation {}
          該例定義了一個(gè)無任何屬性/方法的Annotation。

          定義例2:
          public @interface MyAnnotation {
              public String value();
          }
          該例定義了只有一個(gè)方法為value()的Annotation。一般來說,只有一個(gè)方法的Annotation,方法名一定定義為value。

          定義例3:
          @Retention(RetentionPolicy.RUNTIME)
          @Target(ElementType.METHOD)
          public @interface MyAnnotation {
              public String value();
              public String [] multiValues();
              int number() default 0;
              
          }
          該例定義了一個(gè)具有多方法的Annotation。并設(shè)置其中一個(gè)方法number的默認(rèn)值為0。multiValues 方法定義為數(shù)組類型。Annotation定義可以用MetaAnnotation(元注釋)修飾。MetaAnnotation有以下2個(gè):
          @Retention
          @Target

          我們將在以下對@Retention與@Target加以說明。


          @Retention
          @Retention 可以設(shè)置為RetentionPolicy類型的值。
          例:
          @Retention(RetentionPolicy.RUNTIME)

          RetentionPolicy的值 說明
          RetentionPolicy.CLASS annotation信息將被編譯器編譯時(shí)保存在class文件中,但執(zhí)行時(shí)不會在VM裝載。也就是說不能在執(zhí)行時(shí)動態(tài)取得annotation信息。未設(shè)置@Retention時(shí)這將是默認(rèn)設(shè)置值。
          RetentionPolicy.RUNTIME annotation信息將被編譯器編譯時(shí)保存在class文件中,執(zhí)行時(shí)也會被VM裝載。
          RetentionPolicy.SOURCE annotation信息將被編譯器編譯時(shí)舍棄掉。


          @Target
          @Target表明Annotation可以附加在哪種JAVA元素之上,可以設(shè)置為java.lang.annotation.ElementType數(shù)組類型的值。
          使用例1:
          @Target(ElementType.METHOD)

          使用例2:
          @Target(value={ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.LOCAL_VARIABLE, ElementType.METHOD})

          ElementType是一個(gè)枚舉類型,它具有以下定義:
          ElementType值 說明
          ElementType.ANNOTATION_TYPE 應(yīng)用于其他注解的元注解
          ElementType.CONSTRUCTOR 構(gòu)造函數(shù)
          ElementType.FIELD 字段
          ElementType.LOCAL_VARIABLE 方法中的本地變量
          ElementType.METHOD 方法
          ElementType.PACKAGE
          ElementType.PARAMETER 方法的參數(shù)
          ElementType.TYPE 類,接口或者枚舉聲明





          posted on 2009-02-27 17:16 ID刀 閱讀(288) 評論(0)  編輯  收藏 所屬分類: JAVA_Base

          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(2)

          隨筆檔案(1)

          文章分類(21)

          文章檔案(17)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 13725
          • 排名 - 2090

          最新評論

          主站蜘蛛池模板: 镇远县| 屏山县| 岳西县| 兰州市| 博乐市| 东乡族自治县| 郧西县| 富蕴县| 信阳市| 濮阳市| 乌恰县| 东宁县| 汤阴县| 西乡县| 聂拉木县| 赣榆县| 咸丰县| 永城市| 石景山区| 台安县| 黎城县| 洛阳市| 芮城县| 沙坪坝区| 余江县| 尼玛县| 池州市| 忻城县| 曲周县| 太和县| 西畴县| 镇沅| 石狮市| 两当县| 秦皇岛市| 屏南县| 荆州市| 临沂市| 伊川县| 泉州市| 抚远县|