Java Reference
In-Depth Information
Wir haben oben gesehen, dass man bei der Nutzung einer Annotation alle Attribute ange-
ben muss. Dies gilt nicht, falls Standardwerte für die Attribute einer Annotation festgelegt
wurden:
public @interface Special
{
public String scope() default "no scope";
public int priority() default 5;
}
-------------------------------------------------------------------
@Special(scope="Class", priority=2)
public class AnnotatedClass
{
@Special(scope="Field")
private int i;
@Special(priority=2)
private String s;
@Special
public void m() {}
}
Im obigen Beispiel gibt es Standardwerte für beide Attribute. Deshalb kann eines der beiden
oder können beide Attribute weggelassen werden.
3 . 2 Meta-Annotationen
Die bisher defi nierten Annotationen sind alle zur Laufzeit nicht mehr vorhanden. Will man
aber, dass eine Annotation zur Laufzeit über Refl ection ausgelesen werden kann (s. Abschnitt
3.4), so muss sie durch eine entsprechende Annotation gekennzeichnet werden:
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface Special
{
public String scope();
public int priority();
}
Man bezeichnet Annotationen für Annotationen als Meta-Annotationen. Die Meta-Annota-
tion @Retention ist im Package java.lang.annotation defi niert. Deshalb wurde die Import-
Anweisung oben verwendet. Mögliche Werte für die @Retention-Annotation sind:
! Retention.RUNTIME: Wie oben dargestellt sind die derart gekennzeichneten Annotatio-
nen noch zur Laufzeit über Refl ection auslesbar.
! Retention.CLASS: Dies ist der Standardwert, der verwendet wird, wenn keine @Retention-
Annotation angegeben wird. Die Annotation wird mit in die vom Compiler erzeugte Class-
Datei geschrieben. Würde man die Class-Datei analysieren, so würde man die Annotation
fi nden. Über Refl ection ist die Annotation aber nicht zu sehen.
 
Search WWH ::




Custom Search