1. 程式人生 > >java language specification 翻譯 9.6 Annotation Types 註解型別

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