Java 8 Update: Erster Entwurf für Repeating Annotations

Hartmut Schlosser

Joe Darcy hat erste Ergebnisse des JDK Enhancement Proposals (JEP) 120: Repeating Annotaions vorgestellt. Im Rahmen des JEP soll die Java-Sprache dergestalt erweitert werden, dass mehrere Annotationen des selben Types auf ein einziges Programmierelement angewendet werden können.

Hintergrund für die vorgeschlagene Verbesserung ist die gängige, doch unschöne Praxis, die Anwendung mehrerer Annotationen in einer eigenen Container-Annotation zu realisieren – was den Quellcode verkompliziert. Gelöst werden soll das Problem mit einer neuen Meta-Annotation, die deklariert, welcher Annotationstyp als Container fungieren soll.

Laut Joe Darcy soll dieser Mechanismus wie folgt funktionieren:

Annotation types with an @ContainerAnnotation are known as repeatable annotation types. The presence of an @ContainerAnnotation indicates multiple annotations of that annotation type will be logically replaced with a single annotation synthesized by the compiler. Joe Darcy

Wie Joe Darcy mitteilt, wurde @ContainerAnnotation, der Meta-Annotation-Typ zur Deklaration der Container Annotation, bereits der Bibkliothek java.lang.annoation hinzugefügt. Aktualisierungen des Interface AnnotatedElement sollen folgen.

Weiterhin legt Darcy einen Entwurf der nötigen Sprachänderungen vor, die vor allem JLS 9.6 Annotation Types betreffen. Im Originalwortlaut sieht das so aus:

  • The value of the @ContainerAnnotation annotation is called the containing annotation type TC.
  • TC must declare a value() method whose return type is T[], or a compile-time error occurs. (This implies that TC can be the containing annotation type for only a single annotation type.)
  • TC may declare methods other than value(). Any such methods must have a default clause, or a compile-time errors occurs.
  • It is a compile time error if the retention of T is not a subset of the retention of TC. This comparison is made taking default retention into consideration.
  • It is a compile time error if T is @Documented and TC is not @Documented.
  • It is a compile time error if T is @Inherited and TC is not @Inherited.
  • It is a compile time error if T has target values that are not included in the target set of TC, taking default target values into account.

Wer sich näher mit der Thematik beschäftigt, sollte sich die gesamten Spezifikationsvorschläge samt Anmerkungen ansehen. Die wiederholbaren Annotationen sollen letztendlich in Java 8 einfließen, dessen Freigabe auf Mitte 2013 angesetzt ist. Repeating Annotations – ein Feature, auf das Sie sich freuen?

Geschrieben von
Hartmut Schlosser
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.