A nagy sikerre való tekintettel az enum típus bemutatása után következzenek az annotációk, amelyek a generics mellett Java 5 egyik legfontosabb újdonságai. A developer.com körüljárta a témát egészen részletesen M. M. Islam Christy cikkében.
Az annotációk lényege, hogy a kódot könnyebben karbantarthatóvá, illetve hibatűrőbbé tehetjük. Annotációt tudunk tenni osztályokra, konstruktorra, metódusokra illetve akár változókra, mezőkre. Annotációkat használ a JPA (Java Persistence API) is, illetve sok egyéb programkönyvtár: így működik a Swing Application Framework databinding része. Az annotáció tehát jelez valamit a fordító vagy az egyéb keretrendszerek számára, felfoghatjuk a gépnek szóló kommentként is.
Az annotációk többféle célt szolgálnak. Leggyakrabban a marker jellegű annotációkat használjuk, amelyek jeleznek valamit, ezek közül is a Java által lefoglalt annotációkat:
Override, amely lényege, hogy a megjelölt metódus mindenképpen felül kell írja az ősosztály azonos metódusát, különben fordításkor hibát kapunk
Saját annotációkat is tudunk írni, amelyeknek különféle feladatokat adhatunk, a legegyszerűbb annotáció az alábbi:
public @interface SimpleAnnotation { } |
De ennek szinte semmi értelme nincs. Az annotációk egyfajta osztályként viselkednek, tehát lehet nekünk metódusuk, amely valamit csinálhat:
public @interface SimpleAnnotation { String givenValue(); } |
Ezt fel tudjuk használni egy metódus annotálására, amely során semmi sem fog történni, de képesek leszünk elérni az átadott értéket, ha szükségünk van rá:
@SimpleAnnotation (givenValue="Hello World!") public void doThis() { System.out.println("Do this!"); } |
Ha több paramétert adunk meg, akkor azokat vesszővel tudjuk elválasztani az annotáció neve után megadva. Ha egy saját annotációt nem az összes típushoz használnánk, akkor korlátozni tudjuk annak használhatósági körét a @Target annotációval, amely az annotáció annotációja: