@Target
Określa na jakich elementach można będzie używać adnotacji. Java definiuje ponad 10 opcji. Najczęściej spotykane to:
-ElementType.TYPE – jeśli chcemy aby adnotacja mogła być używana na klasach, interfejsach, enumeracjach czy rekordach
-ElementType.METHOD – jeśli chcemy aby adnotacja mogła być używana na metodach
-ElementType.FIELD – jeśli chcemy aby adnotacja mogła być używana na polach klasy
@Retention
Określa w jakim momencie cyklu życia kodu adnotacja jest widoczna:
SOURCE – tylko na poziomie źródeł (nie zobaczymy jej podczas kompilacji ani w podczas uruchomienia aplikacji)
CLASS – widoczna na poziomie kompilacji
RUNTIME – widoczna w dla kompilatora oraz podczas działania programu
@Inherited
Dzięki temu adnotacja jest propagowana na podklasy klasy na którą jest nałożona.
@Documented
Potrzebna jeśli chcemy aby w JavaDocu zawarte było użycie adnotacji:
@Inherited
public @interface SomeAnnotation { }
class Test{
@SomeAnnotation
private String name;
}
JavaDoc:
@SomeAnnotation
private String name;
@Repeatable
Dzięki dodaniu tej adnotacji możliwe jest wielokrotne użycie danej adnotacji.
@Repeatable
public @interface SomeAnnotation { }
class Test{
@SomeAnnotation
@SomeAnnotation
@SomeAnnotation
private String name;
}