元註解
| 導航 Javadoc & 註解 主題: |
在 java.lang.annotation 包中,有五種稱為 元註解 的註解型別。這些註解型別用於註解其他註解型別。
如果一個成員被標記為 @Documented 的型別註解,那麼該成員將被記錄為註解該型別。
程式碼清單 1.1:@Documented 的使用
@interface Secret { }
@Documented
@interface NotSecret { }
@Secret
@NotSecret
public class Example {
}
|
在 Example 類的文件中,例如 JavaDoc,Example 將顯示為被 @NotSecret 註解,但不會被 @Secret 註解。
顧名思義,@Inherited 註解型別會被註解型別的子類繼承。
程式碼清單 1.2:@Inherited 的使用
@Inherited
@interface ForEveryone { }
@interface JustForMe { }
@ForEveryone
@JustForMe
class Superclass { }
class Subclass extends Superclass { }
|
在這個例子中,Superclass 被顯式地標記了 @ForEveryone 和 @JustForMe。Subclass 沒有被顯式地標記任何一個;但是,它繼承了 @ForEveryone,因為後者被 @Inherited 註解。@JustForMe 沒有被註解,因此它不會被 Subclass 繼承。
| 本節是一個存根。 你可以透過 擴充套件它 來幫助華夏公益教科書。 |
@Repeatable 註解型別是可重複的——即可以多次指定在同一個類上。這個元註解是在 Java 8 中新增的。
不同的註解型別有不同的用途。有些是用於編譯器的;而有些則旨在動態地反映在執行時。編譯器註解沒有理由在執行時可用,因此 @Retention 元註解指定了註解型別應該保留多長時間。value 屬性是 java.lang.annotation.RetentionPolicy 列舉常量之一。這些可能的值,從最短的保留時間到最長的保留時間,如下所示
RetentionPolicy.SOURCE- 註解將不會被包含在類檔案中。這對於僅用於編譯器的註解很有用。
RetentionPolicy.CLASS- 註解將被包含在類檔案中,但不能被反射地讀取。
RetentionPolicy.RUNTIME- 註解可以在執行時被反射。
如果沒有指定 @Retention 策略,它將預設為 RetentionPolicy.CLASS。
@Target 元註解決定什麼可以被註解標記。value 屬性是 java.lang.annotation.ElementType 列舉常量之一或多個。這些常量是 ElementType.ANNOTATION_TYPE、CONSTRUCTOR、FIELD、LOCAL_VARIABLE、METHOD、PACKAGE、PARAMETER 和 TYPE。
如果沒有指定 @Target,則註解可以用於任何程式元素。
