Gramatika anotace je v dokumentaci Java popsána následovně:
Annotations:
Annotation
Annotations Annotation
Annotation:
NormalAnnotation
MarkerAnnotation
SingleElementAnnotation
Z popisu gramatiky anotace je zřejmé, že každý element může být anotován i více anotacemi. Dále gramatika popisuje tři druhy anotací: klasickou anotaci, indikátorovou anotaci a jednoelementovou anotaci.
Pro interpretaci anotace v grafu je nutno zavést dva nové vrcholy. Prvním vrcholem bude vrchol anotace, který nebude obsahovat žádnou vlastnost. Naproti tomu bude nutno pro tento vrchol vytvořit vztah vedoucí k odpovídajícímu anotačnímu typu. Vzhledem tomu, že se jedná o typ bude tento vztah nazván stejně jako vztah určující datový typ a to is_type. Dále bude možnost vytvořit nula nebo více vztahů s uzlem zachycujícím hodnotu elementu anotace. Vrchol hodnoty bude mít jedinou vlastnost. Tato vlastnost bude nazvána value a bude zaznamenávat nově nastavenou hodnotu elementu. S vrcholem elementu, se kterým je přiřazena hodnota, bude tento vrchol spjat vztahem s názvem is_value_of. Následuje shrnutí popsaných vrcholů.
Shrnutí anotace
Vlastnosti:
- nic
- is_type (Anotační typ)
- have_element (Hodnota)
Shrnutí hodnoty
Vlastnosti:
- value (String)
- is_value_of (Metoda)
Nyní si projdeme 3 možné druhy anotování a vytvoříme pro každý druh demonstrační příklad s předvedením uložení v grafové databázi.
Klasická anotace (NormalAnnotation)
Klasická anotace má v dokumentaci nejobsáhlejší popis gramatiky oprotiostatním anotacím. Ukážem si jenom část z tohoto popisu.
NormalAnnotation:U tohoto druhu anotace je tedy možné vypisovat páry element a hodnota, kde hodnota může obsahovat podmíněný výraz, anotaci, hodnotu či pole hodnot. Tyto páry se vepisují do kulatých závorek a je možné jich zadat nula a více.
@
TypeName(
ElementValuePairsopt)
ElementValuePairs:
ElementValuePair
ElementValuePairs,
ElementValuePair
ElementValuePair:
Identifier=
ElementValue
ElementValue:
ConditionalExpression
Annotation
ElementValueArrayInitializer
Jako příklad si prvně nadeklarujeme anotační typ AnotType, který budeme v následujících příkladech anotací využívat.
1 2 3 4 5 | package test_package; public @interface AnotType { int[] element1 () default {1,2}; String element2() default "hodnota"; } |
Nyní vytvoříme příklad klasické anotace.
1 2 3 4 5 6 | package test_package; public class Anotovana { @AnotType(element2="jina_hodnota", element1={3,4}) String metoda(){ return "nic"; } } |
Závěrem si ukážeme odpovídající graf reprezentující předchozí kód.
Indikátorová anotace (MarkerAnnotation)
Dalším druhem anotace je indikátorová anotace,která je pro změnu nejjednodušší. Jediné, co se při této anotaci uvádí je název anotačního typu. Programátor se tak spoléhá na defaultní hodnoty uvedené při deklaraci anotačního typu. V tomto případě bude příklad kódu a odpovídajícího grafu vypadat následovně:
1 2 3 4 5 6 | package test_package; public class Anotovana { @AnotType String metoda(){ return "nic"; } } |
Jednoelementová anotace (SingleElementAnnotation)
Posledním způsobem anotace je zjenodušení klascké anotace. Pokud tedy máme anotační typ s právě jedním elementem, jehož název je "value", potom při anotaci není potřeba název tohoto elementu uvádět.
Pro příklad je nutné si prvně vytvořit demonstrativní anotační typ, který bude obsahovat pouze jeden element. Dále potom ukážeme použití tohoto anotačního typu při anotaci.
Anotační typ AnotType:
1 2 3 4 | package test_package; public @interface AnotType { String value() default "hodnota"; } |
Použití anotačního typu:
1 2 3 4 5 6 | package test_package; public class Anotovana { @AnotType("neco") String metoda(){ return "nic"; } } |
Odpovídající graf
Zdroje:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-9.html#jls-9.7
Žádné komentáře:
Okomentovat