程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 在Eclipse 3.1中體驗J2SE 5.0的新特性 第二部分 :注釋類型(5)

在Eclipse 3.1中體驗J2SE 5.0的新特性 第二部分 :注釋類型(5)

編輯:J2SE

2.3.1動態查找注釋
 
當我們定義好了注釋以後,我們可以開發一些分析工具來解釋這些注釋。這裡通常要 用到Java的反射特性。比如說我們希望找到某個對象/方法/域使用了哪些注釋,或者獲得 某個特定的注釋,或者判斷是否使用某個特定的注釋, 我們可以參考下面這個例子。這個 例子中定義了兩個注釋:TODO和TOFORMATE。在MyCalculator類中,TODO用來修飾方法 calculateRate,而TOFORMATE用來修飾類變量concurrency和debitDate。而在類 TestCalculator的main函數中,通過Java反射特性,我們查找到使用這些注釋的類變量和 方法。清單12-清單15分別顯示這些類的定義。
 
清單12 TODO注釋的定義
 
@Target({ElementType.METHOD})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface TODO {
    int priority() default 0;
 }
 
清單13 TOFORMATE的定義
 
@Target({ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 public @interface TOFORMATE {
 }
 
清單14 使用注釋的類MyCalculator
 
public class MyCalculator {
    boolean isReady;
      @TOFORMATE double concurrency;
    @TOFORMATE Date debitDate;
    public MyCalculator() {
    super();
    }
 
   @TODO
    public void calculateRate(){
      System.out.println("Calculating...");
    }
 }
 
清單15動態查找注釋
 
public class TestCalculator {
    public static void main(String[] args) {
      MyCalculator cal = new MyCalculator();
      cal.calculateRate();
    try {
      Class c = cal.getClass();
      Method[] methods = c.getDeclaredMethods();
 
       for (Method m: methods) {
      // 判斷這個方法有沒有使用TODO
      if (m.isAnnotationPresent(TODO.class))
      System.out.println("Method "+m.getName()+": the TODO is present");
      }
 
     Field[] fields = c.getDeclaredFIElds();
      for (Field f : fIElds) {
      // 判斷這個域有沒有使用TOFORMATE
        if (f.isAnnotationPresent(TOFORMATE.class))
        System.out.println("FIEld "+f.getName()+": the TOFORMATE is present");
        }
      } catch (Exception exc) {
        exc.printStackTrace();
      }
    }
 }
 
下面我們來運行這個例子,這個例子的運行結果如圖10所示。
 
運行結果和我們先前的定義是一致的。在運行時,我們可以獲得注釋使用的相關信息 。
 
圖6 運行結果
 


在我們介紹了什麼是注釋以後,你可能會想知道注釋可以應用到什麼地方呢?使用注 釋有什麼好處呢?在下面的小節中我們將介紹一個稍復雜的例子。從這個例子中,你將體 會到注釋所以提供的強大的描述機制(declarative programming)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved