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

Java註解實戰:從認識元註解到自訂註解處理器完整指南

     編輯:Java 程式設計入門

內建三大註解快速回顧

  • @Override:編譯期檢查方法確實覆寫父類別
  • @Deprecated:標記過時API,編譯產生警告
  • @SuppressWarnings:抑制特定編譯警告

元註解:定義註解的註解

自訂註解必須理解四大核心元註解(皆在java.lang.annotation套件):

元註解用途關鍵值
@Target限定註解可標註位置ElementType:TYPE、FIELD、METHOD、PARAMETER、CONSTRUCTOR、LOCAL_VARIABLE、ANNOTATION_TYPE、PACKAGE
@Retention定義註解保留階段RetentionPolicy:SOURCE(僅原始碼)、CLASS(預設,含class檔)、RUNTIME(JVM可見,可反射讀取)
@Documented納入Javadoc文件標記型,無參數
@Inherited允許子類別繼承父類別註解僅對TYPE類型註解有效

自訂註解語法規則

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Description {
    String value(); // 單一屬性慣命名為value
}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Name {
    String originate();
    String community(); // 多屬性需指定名稱
}

屬性限制:僅支援基本型別、String、Enum、Class、註解型別及其陣列;存取修飾符僅public或預設;無方法主體,類似介面宣告。

實戰範例:類別與方法級註解

@Description("javaeye,做最棒的軟體開發交流社群")
public class JavaEyer {
    @Name(originate="創始人:robbin", community="javaEye")
    public String getName() { return null; }

    @Name(originate="創始人:江南白衣", community="springside")
    public String getName2() { return "借用兩位的id一用"; }
}

反射讀取註解處理器

public class TestAnnotation {
    public static void main(String[] args) throws Exception {
        Class<?> clazz = Class.forName("lighter.javaeye.com.JavaEyer");
        
        // 讀取類別級註解
        if (clazz.isAnnotationPresent(Description.class)) {
            Description desc = clazz.getAnnotation(Description.class);
            System.out.println("描述:" + desc.value());
        }
        
        // 讀取方法級註解
        for (Method m : clazz.getMethods()) {
            if (m.isAnnotationPresent(Name.class)) {
                Name name = m.getAnnotation(Name.class);
                System.out.println(name.originate());
                System.out.println("建立的社群:" + name.community());
            }
        }
    }
}

輸出結果:

描述:javaeye,做最棒的軟體開發交流社群
-----------------
創始人:robbin
建立的社群:javaEye
創始人:江南白衣
建立的社群:springside

進階應用方向

掌握基礎後,可延伸至編譯期註解處理器(APT)自動產生代碼、執行期框架整合(如Spring的@Autowired、JPA的@Entity)、測試框架(JUnit@Test)等實戰場景。

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