2 Syntax

Dieses Kapitel behandelt die Syntax von Annotationen.

Sollen Annotationen benutzen werden, so muß erst ein Typ zu dieser Annotation deklariert werden. Annotations-Typen werden durch ein Annotations-Interface definiert, wobei es sich hierbei um eine Sonderform der interface Deklaration handelt:


  AnnotationTypeDeclaration:
          @ interface Identifier AnnotationTypeBody
  
      AnnotationTypeBody:
          { [AnnotationTypeElementDeclarations] }
  
      AnnotationTypeElementDeclarations:
          AnnotationTypeElementDeclaration
          AnnotationTypeElementDeclarations AnnotationTypeElementDeclaration
  
  AnnotationTypeElementDeclaration:
          {Modifier} AnnotationTypeElementRest
  
  AnnotationTypeElementRest:
           Type Identifier AnnotationMethodOrConstantRest;
          ClassDeclaration
          InterfaceDeclaration
          EnumDeclaration
          AnnotationTypeDeclaration
  
          AnnotationMethodOrConstantRest:
          AnnotationMethodRest
          AnnotationConstantRest
  
  AnnotationMethodRest:
          ( ) [DefaultValue]
  
  AnnotationConstantRest:
          VariableDeclarators
  
      DefaultValue:
          default ElementValue
  

3

Eine konkrete Deklaration eines solchen Annotations-Typen könnte demnach wie folgt aussehen:


1  public @interface MyFirstAnnotation {
2    boolean notNull() default false;
3    int someNumber() default 4711;
4    String column();
5  }

Die Anwendung eines solchen Annotations-Typen, also die Annotation an sich hat immer das folgende Format:


  Annotation:
          @ TypeName [( [Identifier =] ElementValue)]
  

3
Eine konkrete Anwendung könnte demnach wie folgt aussehen:


1  //Wenn man alle Parameter setzen will
2  @MyFirstAnnotation(notNull=false,someNumber=12,column="HelloWorld")
3  //...
4  
5  //Wenn man die Standard Werte nutzen will
6  @MyFirstAnnotation
7  //...

Als Parameter einer Annotation sind folgende Typen zulässig:

Annotationen können durch die Anzahl ihrer Parameter in drei Gruppen geteilt werden, für die es folgende Kurzschreibweisen gibt:


ParameterBezeichnung Kurzform



= 0 Marker-Annotationen @SomeAnnotation
= 1 Einzelwert-Annotationen @SomeAnnotation("value")
> 1 mehrwertige Annotationen@SomeAnnotation(key1="value",key2=4711,...)

Bei der verkürzten Schreibweise für Einzelwert-Annotationen ist zu beachten, dass diese Schreibweise nur dann zulässig ist, wenn der Parameter den Namen value hat. Sowohl der default Wert, als auch die Werte anderer Parameter dürfen nie auf null gesetzt sein und müssen zum Compile-Zeitpunkt feststehen.4

Annotationen sind Modifikatoren:


  Modifier:
                  Annotation
                  public
                  protected
                  private
                  static
                  abstract
                  final
                  native
                  synchronized
                  transient
                  volatile
                  strictfp
  

3

Sowohl Pakete als auch Klassen, Schnittstellen, Felder, Methoden, Parameter, Konstruktoren oder lokale Variablen können mit Annotationen versehen werden (Siehe  [GJSB05] Kapitel 18). Wobei es für einzelnen Annotationen Einschränkungen geben kann. Es kann also sein, dass eine bestimmte Annotation laut Definition nur auf Pakete oder Methoden anzuwenden ist. Wie man die Ziele (Targets) von Annotationen bestimmt, beschreibt das Kapitel Meta-Annotationen.