posts - 1,  comments - 0,  trackbacks - 0
          Annotation是一種特殊的interface。所以可以在annotation里定義方法,屬性;也可以讓某個類從annotation繼承(implements)。

          下面從簡單地范例開始,讓我們一步步加深對annotation的了解。
          無任何方法/屬性Annotation范例:

          MyAnnotation0.java

          package com.test.annotation;

          public @interface MyAnnotation0 {
              
          }

          MyAnnotation0為一個無任何方法和屬性的annotation。

          使用MyAnnotation0:

          TestMyAnnotation0.java
          @MyAnnotation0
          public class TestMyAnnotation0 {
              @MyAnnotation0
              public void testMethod() {

              }
          }



           具有一個value方法Annotation范例:

          MyAnnotation1.java

          public @interface MyAnnotation1 {
              
              /**
               * value method
               * @return value
               */

              public String value();
          }

          MyAnnotation1具有一個名為value的方法。

          MyAnnotation1使用:
          TestMyAnnotation1.java

          @MyAnnotation1("hello")
          public class TestMyAnnotation1 {
              @MyAnnotation1(value="world")
              public void testMethod() {
              }
          }

          可以通過@Annotation名(方法名1=值1, 方法名2=值2, …)的形式給annotation賦值。只有一個方法的時候,可以直接省略為:@Annotation名(值1) 的賦值形式。當方法返回一個數組時,可以用 方法名={值1, 值2, …}給其賦值。

          具有一個value方法和一個屬性Annotation范例:

          如果必要,還可以在annotation里為其定義屬性。如下:
          MyAnnotation2.java

          @interface MyAnnotation2 {
              public String value();
              public String myProperty = "hello world";
          }

          其中,myProperty只能申明為public或無public修飾(無public修飾時也默認為public)為static, final屬性(即使不寫也默認為static, final)。

          使用例:
          TestMyAnnotation2

          class TestMyAnnotation2 {
              public static void main(String[] args) {
                  System.out.println(MyAnnotation2.myProperty);
              }

              @MyAnnotation2("")
              public void testMethod1() {
              }
          }

          上例會打印出:

          hello world



           

          復雜型annotation的定義與使用

          本節介紹較為復雜的annotation定義與使用。
          先看代碼:
          MyAnnotation3.java

          public @interface MyAnnotation3 {
              public String value();
              public String[] multiValues();
              int number() default 0;
          }

          MyAnnotation3具有一個返回String的value方法,返回String[]的multiValues 方法;還有一個返回int 的number方法。其中number方法具有默認值0。

          使用例:
          TestMyAnnotation3.java

          class TestMyAnnotation3 {
              @MyAnnotation3(value = "call testMethod1", multiValues={"1", "2"}, number = 1)
              public void testMethod1() {

              }

              @MyAnnotation3(value = "call testMethod2", multiValues={"1", "2"})
              public void testMethod2() {

              }
          }

          number具有默認值,所以標注時可以不為其賦值。其余方法則必須通過上面介紹的方法賦值。multiValues返回一個String[]數組,所以可以通過multiValues={"1", "2"}為其賦值。

           

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

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

          常用鏈接

          留言簿(2)

          隨筆檔案(1)

          文章分類(21)

          文章檔案(17)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 13723
          • 排名 - 2090

          最新評論

          主站蜘蛛池模板: 南郑县| 安溪县| 天津市| 珲春市| 塘沽区| 丰都县| 屏东市| 通河县| 浏阳市| 临城县| 江源县| 大洼县| 沧源| 靖远县| 新竹市| 尼玛县| 乐山市| 韶关市| 松阳县| 张北县| 都安| 吉首市| 双城市| 贵阳市| 砀山县| 当雄县| 五大连池市| 普兰店市| 县级市| 岢岚县| 灌阳县| 日喀则市| 淳安县| 泰和县| 利川市| 青川县| 宣汉县| 南澳县| 万载县| 汪清县| 长岭县|