Anotace v Javě jsou způsobem, jak do kódu přidat meta informace (metadata, data o datech). Anotace se používají pro:
- instrukce pro compiler
- instrukce pro build-time
- instrukce pro run-time
Java umožňuje vytvořit si vlastní anotace pomocí klíčového slova @interface.
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
int version() default 1;
}
Použitá anotace @Retention(RetentionPolicy.RUNTIME) určuje, že tato anotace (@MyAnnotation) má být přístupná i v run-time. Anotace @MyAnnotation má dva elementy (value a version). Element version má nastavenu výchozí hodnotu na 1.
public @interface MyOtherAnnotation {
}
Anotace @MyAnnotation žádné elementy neobsahuje.
@MyOtherAnnotation
@MyAnnotation(value = "abcd")
public class MyClass {
}
Třída MyClass je anotována oběma anotacemi. Anotace @MyAnnotation má nastavenu hodnotu elementu value na „abcd“ a hodnotu version na 1 (default).
import java.lang.annotation.Annotation;
public class App {
public static void main(String[] args) {
Class clazz = MyClass.class;
if (clazz.isAnnotationPresent(MyAnnotation.class)) {
System.out.println("Je anotován: " + MyAnnotation.class.getSimpleName());
MyAnnotation myAnnotation = (MyAnnotation) clazz.getAnnotation(MyAnnotation.class);
System.out.println(myAnnotation.value());
System.out.println(myAnnotation.version());
}
if (clazz.isAnnotationPresent(MyOtherAnnotation.class)) {
System.out.println("Je anotován: " + MyOtherAnnotation.class.getSimpleName());
}
}
}
Výstup:
Je anotován: MyAnnotation abcd 1
Díky tomu, že @MyAnnotation je anotováná @Retention(RetentionPolicy.RUNTIME) je možné k ní pomocí reflexe přistupovat i v run-time. Lze zjistit nejen to, zda daná třída je pomocí určité anotace anotována, ale také hodnoty elementů. Anotace @MyOtherAnnotation v runtime přítomna není.