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í.