首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2SE

J2SE 1.5 註解(Annotation)語法實戰:運行時反射提取元數據

     編輯:J2SE

前言

J2SE 1.5 引入的註解機制讓開發者能在原始碼中嵌入元數據。本文將示範如何定義自訂註解、在運行時透過反射提取註解資訊,並說明關鍵的保留策略設定。

一、 定義自訂註解

使用 @interface 關鍵字定義註解類型,成員以無參數方法形式宣告:

/** 使用者自訂標籤,含成員變數 */
@Retention(RetentionPolicy.RUNTIME) // 關鍵:指定運行時保留
public @interface MyTag {
    String name();
    int age();
}

二、 套用註解於方法

public class TagTest {
    @MyTag(name="MyTag", age=1)
    public void test() { }

    public static void main(String[] args) {
        TagTest tt = new TagTest();
        try {
            // 取得 test 方法上的所有註解
            Annotation[] annotations = tt.getClass().getMethod("test").getAnnotations();
            for (Annotation tag : annotations) {
                System.out.println("Tag is: " + tag);
                System.out.println("tag.name() = " + ((MyTag)tag).name());
                System.out.println("tag.age() = " + ((MyTag)tag).age());
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

三、 關鍵點:@Retention 保留策略

若自訂註解未標註 @Retention(RetentionPolicy.RUNTIME),則該註解資訊**不會保留在類別檔中**,運行時透過反射無法獲取,上述程式將無任何輸出。三種保留策略:

  • SOURCE:僅原始碼階段保留,編譯後捨棄(如 @Override、@SuppressWarnings)。
  • CLASS(預設):保留在 .class 檔,但 JVM 不載入,運行時不可見。
  • RUNTIME:保留在 .class 檔並由 JVM 載入,運行時可透過反射讀取。

四、 運行結果

Tag is: @tiger.annotation.MyTag(name=MyTag, age=1)
tag.name() MyTag
tag.age() 1

五、 應用前景

獲取註解資訊後,可用於:

  • 語法檢查與靜態分析
  • 文件相關性驗證
  • 自動化程式碼生成
  • 各類統計與報表
  • 框架配置(如 Spring、Hibernate 大量使用註解)

更多細節請參考官方文件:Java SE 1.5 Annotations Guide。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved