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)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 13722
          • 排名 - 2090

          最新評論

          主站蜘蛛池模板: 巴马| 剑川县| 秭归县| 丁青县| 南城县| 德钦县| 绥滨县| 承德县| 华坪县| 呼伦贝尔市| 周至县| 宜春市| 个旧市| 久治县| 康乐县| 瓦房店市| 惠来县| 会理县| 福泉市| 盐亭县| 苍梧县| 璧山县| 大邑县| 隆昌县| 建平县| 浮山县| 仁布县| 泰安市| 故城县| 凌云县| 西乌珠穆沁旗| 修水县| 大荔县| 明溪县| 融水| 汝城县| 隆昌县| SHOW| 万载县| 名山县| 荃湾区|