AnnotationTypeDeclaration:Dle popisu lze deklaraci anotačního typu začít seznamem modifikátorů, následuje název anotačního typu a na závěr je nutno doplnit tělo deklarace anotačního typu. Při vytváření anotačního typu není možné implementovat žádné rozhraní ani dědit od jiného anotačního typu nebo čehokoliv jiného. Každý anotační typ je automaticky potomkem třídy java.lang.annotation.Annotation. I tento vztah dědění bude do grafu zaznamenán klasickým způsobem, jaký je u rozhraní.
InterfaceModifiersopt@
interface
Identifier AnnotationTypeBody
AnnotationTypeBody:
{
AnnotationTypeElementDeclarationsopt}
AnnotationTypeElementDeclarations:
AnnotationTypeElementDeclaration
AnnotationTypeElementDeclarations AnnotationTypeElementDeclaration
Modifikátory anotačního typu jsou stejné jako u rozhraní a proto budou ukládány stejným způsobem.
Gramatika těla anotačního typu je v dokumentaci Java popsána následovně:
AnnotationTypeElementDeclaration:Zde jsou opětjisté podobnosti s deklarací rozhraní resp. třídy. Deklarace konstant, vnitřních tříd a rozhraní je stejná jako v deklaraci rozhraní. Rozdíl jde vidět u deklarace metod. V deklaraci anotačního typu nelze deklarovat generickou metodu a dále zde lze nastavit defaultní hodnotu metody. Protože nás defaultní hodnota metody nezajímá budeme tuto informaci v grafu ignorovat. S takovýmto zjednodušením lze na deklaraci abstraktních metod v anotačním typu pohlížet stejně jako na deklaraci metod v klasickém rozhraní. Tělo deklarace anotačního typu navíc umožňuje deklaraci výčtů (enum) a další vnitřní anotační typy. S deklarovanými vnitřními výčty a anotačními typy bude pracováno jako s klasickými vnitřními třídami. Bude vytvořen vztah s názvem have_inner mezi vrcholem anotačního typu a relevantním vrcholem (vrcholem výčtu nebo vnitřním anotačním typem).
AbstractMethodModifiersopt Type Identifier( )
Dimsopt DefaultValueopt;
ConstantDeclaration
ClassDeclaration
InterfaceDeclaration
EnumDeclaration
AnnotationTypeDeclaration
;
DefaultValue:
default
ElementValue
Souhrn
Vlastnosti:
- name (String)
- static (yes/no)
- abstract (yes/no)
- inner (yes/no)
- access (public/private/protected)
- package (String)
- strictfp (yes/no)
- extends (java.lang.annotation.Annotation)
- uses (Třída, výčet nebo rozhraní)
- have_inner (Vnitřní třída, výčet nebo rozhraní)
- have_anonym (Anonymní třída)
- have_method (Metoda)
- have_attribute (Atribut)
1 2 3 4 5 6 7 8 9 | package test_package; public @interface AnotType { interface VnitrniRozhrani{ public static String jina_konstanta = "hodnota"; }; public VnitrniRozhrani vr = new VnitrniRozhrani() {}; public String konstanta = "hodnota"; public int metoda () default 1; } |
Zdroje:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.6
Žádné komentáře:
Okomentovat