W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
標記注釋類型是沒有元素的注釋類型,甚至沒有默認值。
標記注釋由注釋處理工具使用。
public @interface Marker { } @Marker public class Main{ }
元注釋類型是注釋類型,用于注釋其他注釋類型。
元注釋類型是Java類庫的一部分。它們在包java.lang.annotation中聲明。
以下注釋類型是元注釋類型:
目標注釋類型注釋注釋類型以設(shè)置上下文以使用注釋類型。
它只有一個名為value的元素。其值元素是java.lang.annotation.ElementType枚舉類型的數(shù)組。
下表列出了ElementType枚舉中的所有常量。
常量名稱 | 描述 |
---|---|
ANNOTATION_TYPE | 注釋另一個注釋類型聲明。 這使得注釋類型為元注釋。 |
CONSTRUCTOR | 注釋構(gòu)造函數(shù)。 |
FIELD | 注釋字段和枚舉常量。 |
LOCAL_VARIABLE | 注釋局部變量。 |
METHOD | 注釋方法。 |
PACKAGE | 注釋包聲明。 |
PARAMETER | 注釋參數(shù)。 |
TYPE | 注釋類,接口(包括注釋類型)或枚舉聲明。 |
TYPE_PARAMETER | 在通用類,接口,方法等中注釋類型參數(shù)。 |
TYPE_USE | 注釋所有類型的使用。 |
以下版本注釋類型具有目標元注釋,其指定Version注釋類型可以與僅有三種類型的程序元素一起使用:任何類型(類,接口,枚舉和注釋類型),構(gòu)造函數(shù)和方法。
import java.lang.annotation.Target; import java.lang.annotation.ElementType; @Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD }) public @interface Version { int major(); int minor(); }
版本注釋不能用于除其Target注釋中指定的三種類型之外的任何程序元素。
import java.lang.annotation.ElementType; import java.lang.annotation.Target; @Target({ ElementType.TYPE_USE }) @interface MyAnno { } @Target({ ElementType.TYPE_USE }) @interface MyAnno2 { } public class Main { public void processData() throws @MyAnno Exception { int roundedValue = (@MyAnno2 int) .02; Main t = new @MyAnno Main(); } }
如果我們不與注釋目標注釋類型注釋類型,注釋類型可以用作任何聲明修飾符,除了一個類型參數(shù)聲明。
保留注釋設(shè)置注釋類型的保留策略。
注釋可以在三個級別保留。
保留元注釋類型指定Java應(yīng)如何保留注釋。
如果注釋類型具有“僅限源代碼”保留策略,則在編譯到類文件中時將刪除其實例。
如果保留策略是“僅類文件”,則其實例將保留在類文件中,但不能在運行時讀取。
如果保留策略為“類文件和運行時”,則注釋實例保留在類文件中,并且它們可在運行時讀取。
保留元注釋類型聲明一個名為value的元素,它是java.lang的。 annotation.RetentionPolicy枚舉類型。
RetentionPolicy枚舉有三個常量SOURCE,CLASS和RUNTIME,它們分別用于指定僅源,僅類和類和運行時的保留策略。
以下代碼在版本注釋類型上使用保留元注釋。它指定版本注釋應(yīng)該在運行時可用。
import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Target({ ElementType.TYPE, ElementType.CONSTRUCTOR, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @interface Version { int major(); int minor(); }
如果我們不對注釋類型使用保留元注釋,則其保留策略僅默認為類文件。我們將無法在運行時讀取這些注釋。
在類文件中或在運行時,局部變量聲明上的注釋永遠不可用,而與注釋類型的保留策略無關(guān)。
繼承的注釋類型是標記元注釋類型。
如果注釋類型使用Inherited元注釋注釋,則其實例將由子類聲明繼承。
如果使用注釋類型注釋除類聲明以外的任何元素,它沒有任何效果。
以下代碼顯示了@Inherited元注釋類型的效果。
import java.lang.annotation.Inherited; @interface Ann2 { int id(); } @Inherited @interface Ann3 { int id(); } @Ann2(id = 1) @Ann3(id = 2) class A { } // Class B inherits Ann3(id=2) annotation from the class A class B extends A { }
文檔化注釋類型是標記元注釋類型。
如果注釋類型用Documented注釋注釋,Javadoc工具將為其所有實例生成文檔。
import java.lang.annotation.Documented; @Documented @interface Version { int major(); int minor(); } @Version(major = 1, minor = 0) public class Main { }
當使用Javadoc工具為Main類生成文檔時,Main類聲明上的版本注釋也會作為文檔的一部分生成。
Java 8添加了可重復(fù)元注釋類型。
注釋類型聲明必須用@Repeatable注釋注釋,如果我們在一個單獨的代碼元素上重復(fù)使用它。
Repeatable注釋類型只有一個名為value的元素,其類型是另一個注釋類型的類類型。
import java.lang.annotation.Repeatable; @interface LogHistory { Log[] value(); } @Repeatable(LogHistory.class) @interface Log { String date(); String comments(); } @Log(date = "01/01/2014", comments = "B") @Log(date = "01/21/2014", comments = "A") public class Main { public static void process() { } }
Native注釋類型是元注釋,用于注釋可以從本機代碼引用的字段。它是一個標記注釋。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: