Java SE 5.0+ (API Docs 本身就是一本最棒的參考書!, 下列來源多取自其內容說明.) (下列內容大多參考由 WisdomFish, Kuo 所反製的 Java SE 6 正體中文文檔.) 軟體套件 java.lang.annotation為 Java 程式語言註釋設施提供資源庫支持。
Annotation學習資源選Java Annotation入門 Java Annotation手冊 使用者特性
開發者撰寫規則
Package java.lang.*
Marker Annotation Type
Single-Value Annotation Type
@Documented
java.lang.annotation
|
列舉常數摘要 | |
---|---|
CLASS
編譯器將把註釋記錄在類別檔案中,但在運行時 VM 不需要保留註釋。(Default) |
|
RUNTIME
編譯器將把註釋記錄在類別檔案中,在運行時 VM 將保留註釋,因此可以反射性地讀取。 |
|
SOURCE
編譯器要丟棄的註釋。 |
java.lang.reflect
介面 AnnotatedElement
- 所有已知實作類別:
- AccessibleObject, Class, Constructor, Field, Method, Package
public interface AnnotatedElement
表示目前正在此 VM 中運行的程序的一個已註釋元素。該介面允許反射性地讀取註釋。由此介面中的方法返回的所有註釋都是不可變並且可序列化的。調用者可以修改已賦值陣列列舉成 員的存取器返回的陣列;這不會對其他調用者返回的陣列產生任何影響。
如果此介面中的方法返回的註釋(直接或間接地)包含一個已賦值的 Class
成員,該成員參考了一個在此 VM
中不可存取的類別,則試圖通過在返回的註釋上調用相關的類別返回的方法來讀取該類別,將導致一個 TypeNotPresentException
。
類似地,如果註釋中的列舉常數不再以列舉型別存在,那麼試圖讀取一個已賦值的列舉成員將導致一個 EnumConstantNotPresentException
。
最後,閱讀其定義已經引起不相容性的成員將導致 AnnotationTypeMismatchException
或 IncompleteAnnotationException
。
- 從以下版本開始:
- 1.5
方法摘要 | ||
---|---|---|
|
getAnnotation(Class<T> annotationClass)
如果存在該元素的指定型別的註釋,則返回這些註釋,否則返回 null。 |
|
Annotation[] |
getAnnotations()
返回此元素上存在的所有註釋。 |
|
Annotation[] |
getDeclaredAnnotations()
返回直接存在於此元素上的所有註釋。 |
|
boolean |
isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果指定型別的註釋存在於此元素上,則返回 true,否則返回 false。 |
@Target
java.lang.annotation
註釋型別 Target
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Target
指示註釋型別所適用的程序元素的種類別。如果註釋型別宣告中不存在 Target 元註釋,則宣告的型別可以用在任一程序元素上。如果存在這樣的元註釋,則編譯器強制實施指定的使用限制。 例如,此元註釋指示該宣告型別是其自身,即元註釋型別。它只能用在註釋型別宣告上:
@Target(ElementType.ANNOTATION_TYPE)此元註釋指示該宣告型別只可作為複雜註釋型別宣告中的成員型別使用。它不能直接用於註釋:
public @interface MetaAnnotationType {
...
}
@Target({})這是一個編譯時錯誤,它表明一個 ElementType 常數在 Target 註釋中出現了不只一次。例如,以下元註釋是非法的:
public @interface MemberType {
...
}
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.FIELD})
public @interface Bogus {
...
}
必需元素摘要 | |
---|---|
ElementType[] |
value
|
元素詳細資訊 |
---|
value
public abstract ElementType[] value
java.lang.annotation
列舉 ElementType
java.lang.Object
java.lang.Enum<ElementType>
java.lang.annotation.ElementType
- 所有已實作的介面:
- Serializable, Comparable<ElementType>
public enum ElementType
- extends Enum<ElementType>
程序元素型別。此列舉型別的常數提供了 Java 程序中宣告的元素的簡單分類別。
這些常數與 Target
元註釋型別一起使用,以指定在什麼情況下使用註釋型別是合法的。
- 從以下版本開始:
- 1.5
列舉常數摘要 | |
---|---|
ANNOTATION_TYPE
註釋型別宣告 |
|
CONSTRUCTOR
建構子宣告 |
|
FIELD
欄位宣告(包括列舉常數) |
|
LOCAL_VARIABLE
區域變數宣告 |
|
METHOD
方法宣告 |
|
PACKAGE
套件宣告 |
|
PARAMETER
參數宣告 |
|
TYPE
類別、介面(包括註釋型別)或列舉宣告 |
@Inherited
java.lang.annotation
註釋型別 Inherited
@Documented
@Retention(value=RUNTIME)
@Target(value=ANNOTATION_TYPE)
public @interface Inherited
指示註釋型別被自動繼承。如果在註釋型別宣告中存在 Inherited 元註釋,並且使用者在某一類別宣告中查詢該註釋型別,同時該類別宣告中沒有此型別的註釋,則將在該類別的父級類別中自動查詢該註釋型別。此過程會重複進 行,直到找到此型別的註釋或到達了該類別層次結構的頂層 (Object) 為止。如果沒有父級類別具有該型別的註釋,則查詢將指示當前類別沒有這樣的註釋。
注意,如果使用註釋型別註釋類別以外的任何事物,此元註釋型別都是無效的。還要注意,此元註釋僅促成從父級類別繼承註釋;對已實作介面的註 釋無效。
对Annotations忍耐的极限,谈谈常用框架Annotations使用感受