Annotációk a Java 5 nyelvben Kozsik Tamás
Annotációk Módosítószavak bővítése A programszöveg elemeihez rendelhetők –Csomagokhoz, típusokhoz, metódusokhoz, attribútumokhoz, konstruktorokhoz, lokális változókhoz Plusz információt hordoznak –A Java fordító számára –Speciális eszközök számára
Annotációk definiálása és használata Copyright { String value(); Tamás Kozsik") public class Point { public double x, y; public Point(int x, int y){ this.x = x; this.y = y; }
Típusok Primitív típusok Referencia típusok –Osztályok Tömbök Felsorolási típusok –Interfészek Annotáció típusok
Annotáció típus - szintaxis Majdnem olyan, mint egy interface Speciális Megszorítások –Nem lehet generikus –A metódusok benne: nem lehetnek generikusok nem lehet paraméterük a visszatérési érték típusa nem lehet throws-klózuk –Nem lehet szülőinterfésze primitív típus String Class vagy példányosítása Felsorolási típus Annotáció típus Ezekből képzett tömb (1-dim)
Annotáció típus - szemantika Interfész Implicit módon kiterjeszti a java.lang.annotation.Annotation interfészt Lehet belőle leszármaztatni Nem lehet rekurzív a SelfRef { // fordítási hiba SelfRef value(); } Nem ütközhetnek metódusai az Object és az Annotation metódusaival (felüldefiniálás-ekviv.)
Annotációk elemei Az annotáció típus definíciójában bevezetett metódusok Nulla, egy vagy több elem –Nulla: marker –Egy: konvenció, hogy a neve „ value ” Alapértelmezett érték rendelhető hozzájuk
Több elem, alapértelmezett érték RequestForEnhancement { int id(); String synopsis(); String engineer() default "[unassigned]"; String date() default "[unimplemented]"; synopsis="Provide time-travel functionality" ) void travelThroughTime(Date dest){ … }
Marker annotáció Elhagyható zárójelpár Preliminary public class ApplePie { … }
Egy elemet tartalmazó annotáció Ha az elem neve value Vagy, ha több elem, a többinek van default Copyright { String value(); Kozsik (2006)") public class Point { … }
Tömb típusú elem Endorsers { String[] value(); {"Children", "Unscrupulous dentists"}) public class Lollipop {... public class Lollipop {... }
Típushelyettesítő public interface Formatter {... } PrettyPrinter { Class value(); } class GorgeousFormatter implements Formatter {... public class Petunia // ford. hiba public class Begonia {... }
Beágyazott felsorolási típus Quality { enum Level { BAD, INDIFFERENT, GOOD } Level value(); public class Karma {... }
Összetett annotációk Name { String first(); String last(); } Author { Name value(); } public class Point { … }
Mire alkalmazható Csomagokhoz Típusokhoz (annotáció típusokhoz is) Metódusokhoz Attribútumokhoz (enum konstansokhoz is) Konstruktorokhoz Lokális változókhoz Meta-annotáció
Annotáció típusok annotálására Beépített annotáció típusok Saját magát @Target(ANNOTATION_TYPE) Target { … }
Predefinit annotációk A Java nyelvbe/fordítóba beépítettek –Target –Retention –Inherited –Override –SuppressWarnings –Deprecated A szabványos API-ban bevezetettek