目錄
- 目錄
- 元注解
- @Retention
- 執行個體
- 說明
- @Documented
- 執行個體
- @Target
- 執行個體
- 說明
- @Inherited
- 執行個體
- 說明
- @Repeatable
- 執行個體
- 代碼位址
- 系列導航
元注解
适用于其他注釋的注釋稱為元注釋。在 java.lang.annotation 中定義了幾個元注釋類型。
@Retention
@Retention
指定标記的注解如何存儲:
屬性 | 說明 |
---|---|
RetentionPolicy.SOURCE | 标記的注釋隻保留在源層中,編譯器将忽略它。 |
RetentionPolicy.CLASS | 編譯器在編譯時保留标記的注釋,但是Java虛拟機(JVM)會忽略它。 |
RetentionPolicy.RUNTIME | 标記的注釋由JVM保留,以便運作時環境可以使用它。 |
執行個體
@Retention(RetentionPolicy.RUNTIME)
public @interface MetadataDemo {
}
說明
- RetentionPolicy.RUNTIME
運作時注解應該是使用最多的。
- RetentionPolicy.SOURCE
一般用于編譯時注解的定義,比如 lombok 相關的注解。
@Documented
@Documented
@Documented
注解表明,無論何時使用指定的注釋,都應該使用Javadoc工具對這些元素進行文檔化。
(預設情況下,注釋不包含在Javadoc中。)有關更多資訊,請參見Javadoc工具頁。
執行個體
@Retention(RetentionPolicy.CLASS)
@Documented
public @interface MetadataDemo {
}
@Target
@Target
@Target批注标記另一個批注,以限制批注可以應用于何種Java元素。目标注釋指定以下元素類型之一作為其值:
屬性 | 說明 |
---|---|
ElementType.ANNOTATION_TYPE | 應用于注解類型 |
ElementType.CONSTRUCTOR | 可以應用于構造函數 |
ElementType.FIELD | 可以應用于字段或屬性。 |
ElementType.LOCAL_VARIABLE | 可以應用于一個局部變量 |
ElementType.METHOD | 可以應用于方法級注釋 |
ElementType.PACKAGE | 應用于包聲明 |
ElementType.PARAMETER | 應用于方法的參數 |
ElementType.TYPE | 應用于類的任何元素 |
執行個體
@Retention(RetentionPolicy.CLASS)
@Documented
@Target(ElementType.METHOD)
public @interface MetadataDemo {
}
說明
指定我們注解的應用範圍非常重要。一般最常用的是
ElementType.TYPE
和
ElementType.METHOD
@Inherited
@Inherited
@Inherited
表明注解類型可以從超類繼承。(這在預設情況下是不對的。)
當使用者查詢注釋類型而該類沒有對此類型的注釋時,将查詢類的超類以擷取注釋類型。此注釋僅應用于類聲明。
執行個體
@Retention(RetentionPolicy.CLASS)
@Documented
@Target(ElementType.METHOD)
@Inherited
public @interface MetadataDemo {
}
說明
當一個類繼承了擁有此注解的類時,即使目前類沒有任何注解。
隻要父類的注解擁有(
@Inherited
)屬性,則在子類中可以擷取到此注解。
@Repeatable
@Repeatable
在Java SE 8中引入的
@Repeatable
注解表明标記的注解可以多次應用于相同的聲明或類型使用。
有關更多資訊,請參見重複注釋。
執行個體
- Repeats.java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Repeats {
Repeat[] value();
}
- Repeat.java
@Repeatable(value = Repeats.class)
public @interface Repeat {
String value();
}
- RepeatDemo.java
public class RepeatDemo {
@Repeat(value = "tag")
@Repeat(value = "tag2")
public void method() {
}
}
代碼位址
annotation metadata
系列導航
系列導航