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

JDK 5 核心元註解差異詳解:Target、Inherited、Documented

     編輯:Java 相關知識

概覽

JDK 5 提供四大元註解:@Retention、@Target、@Inherited、@Documented。本文聚焦後三者差異與用法。

1. @Target —— 限制註解使用位置

@Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE)
public @interface Target { ElementType[] value(); }

單屬性 value,類型為 ElementType[]。ElementType 枚舉八值:

  • TYPE:類、接口、枚舉、註解類型
  • FIELD:字段(含枚舉常量)
  • METHOD:方法
  • PARAMETER:參數
  • CONSTRUCTOR:構造器
  • LOCAL_VARIABLE:局部變量
  • ANNOTATION_TYPE:註解類型
  • PACKAGE:包(用於 package-info.java)

若註解聲明無 @Target,則可用於任意元素;有則編譯器強制限制。

2. @Documented —— 控制 Javadoc 包含

@Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE)
public @interface Documented {}

標記該元註解的註解,在生成 Javadoc 時會被包含在文檔中;否則 Javadoc 忽略該註解信息。

3. @Inherited —— 控制註解繼承

@Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE)
public @interface Inherited {}

默認情況下,子類不會繼承父類的註解。標記 @Inherited 後,子類可繼承父類被該註解修飾的註解(僅限類級註解,且父類被標記的註解必須有 @Inherited)。

差異總結表

元註解核心作用作用目標默認行為
@Target限制註解可修飾的程序元素類型自定義註解類型無限制(任意元素)
@Documented決定註解信息是否出現在 Javadoc 中自定義註解類型不出現
@Inherited決定註解是否被子類繼承自定義註解類型(類級)不繼承

實戰建議

  • 自定義註解必加 @Target,明確使用場景,避免濫用。
  • 需在 API 文檔展示的註解(如框架配置註解)加 @Documented。
  • 設計框架級類註解且希望子類自動擁有(如 @Entity、@Component)時加 @Inherited。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved