java language specification 翻譯 9.6 Annotation Types 註解型別
9.6 註解型別
一個註解型別的宣告指定一個新的註解型別,一個特殊的介面型別。為了區別一個註解宣告和一個一般的介面宣告,在關鍵詞interface
前加一個at-符號(@)。
AnnotationTypeDeclaration:
{InterfaceModifier} @ interface Identifier AnnotationTypeBody註解型別宣告:
{介面修飾符} @ interface 識別符號 宣告型別主體注意at-符號(@)和關鍵詞 interface 是不同的識別符號。可以在它們中間加一個空格,但是並不建議這麼做。
在註解型別宣告中,註解修飾符的規則在9.7.4和9.7.5節中定義。
在註解型別宣告中,Identifier 是註解型別的名字。
如果註解型別和任何它的內部(enclosing)的類和介面有相同的名字,就會產生一個編譯時錯誤。
每個註解型別的直接父介面是 java.lang.annotation.Annotation
。
根據註解型別宣告語法,一個註解型別宣告不能是泛類,而且不能有
extends
。因為一個註解型別不能顯示宣告一個父類或父介面,因此一個宣告型別的子類或子介面不能是宣告型別。同理,
java.lang.annotation.Annotation
不是宣告型別。
一個註解型別從 java.lang.annotation.Annotation
中繼承了幾個成員,包括隱式的從Object
中繼承的方法,然而這些方法沒有定義宣告型別的成員(9.6.1節)。
因為這些方法沒有定義註解型別的成員,在用註解型別是用它們是不合理的(9.7節)。如果沒有這條規則,我們就不能保證(elements were of the types representable in annotations, or that accessor methods for them woule be available.)。
除非顯示的在此修改,所有使用與普通介面定義的規則也適用於註解的定義。
例如,註解型別和普通的類和介面型別共享相同的名稱空間;在定義介面合法的地方,都可以定義註解型別,並且有相同的範圍和可訪問性。
9.6.1 註解型別要素(Annotation Type Elements)
註解型別的主體可能包含方法們的宣告,每一個都是註解型別的要素(element)。一個註解型別沒有要素(elements),除非這些顯示宣告的方法。
AnnoatitonTypeBody:
{{AnnotationTypeMemberDeclaration}}AnnotationTypeMemberDeclaration:
AnnotationTypeElementDeclaration
ConstantDeclaration
ClassDeclaration
InterfaceDeclaration
;AnnotationTypeElementDeclaration:
{AnnotationTypeElementModifier} UnannTypeIdentifier () [Dims] [DefaultValue];AnnotationTypeElementModifier:
(one of)
Annotation public
abstract