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

JDK 5 註解詳解:@Target 使用指南與 ElementType 詳析

     編輯:Java 相關知識

前言

隨著 Spring 3.0、Struts2 等框架廣泛採用註解,掌握 JDK 5 Annotation 核心元註解至關重要。本文聚焦 @Target,解析其限制作用及 ElementType 枚舉詳情。

@Target 作用

java.lang.annotation.Target 用於指定註解的適用範圍,即註解可修飾的程序元素類型。若註解類型聲明中缺少 @Target,則該註解可用於任意程序元素;若存在,編譯器將強制限制其使用位置。

ElementType 枚舉值詳解

枚舉值適用範圍
METHOD方法聲明
TYPE類、接口(含註解類型)、枚舉聲明
ANNOTATION_TYPE註解類型聲明(被 @interface 修飾的類型)
CONSTRUCTOR構造方法聲明
FIELD字段聲明(含枚舉常量)
LOCAL_VARIABLE局部變量聲明
PACKAGE包聲明(用於 package-info.java)
PARAMETER參數聲明

重點:PACKAGE 的特殊用法

ElementType.PACKAGE 不用於普通類,而是用於固定文件 package-info.java。文件名必須為 package-info,因非合法類文件,Eclipse 新建類會報錯,需以新建文件方式創建。

示例:定義包級註解

@Target({ElementType.PACKAGE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface AsynLog { }

package-info.java 內容

@AsynLog
package org.my.commons.logs.annotation;

編譯期強制檢查

註解只能在 @Target 指定範圍內使用,否則編譯報錯。例如:

@Target({ElementType.METHOD})
public @interface MyAnno { }

若嘗試在類或字段上使用 @MyAnno,編譯器將報錯:「Annotation type not applicable to this kind of declaration」。

完整示例

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface AsynLog { }

該註解僅能修飾方法,運行時保留,可繼承,納入 Javadoc。

總結

@Target 是註解設計的「守門人」,精確控制註解使用位置,避免濫用。結合 ElementType 八大枚舉值,覆蓋 Java 程序元素全維度。實戰中務必根據業務場景合理設置,發揮編譯期約束優勢。

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