Illustration einer tropischen Insel mit Palmen und einem hohen Berg

Java Blog für Programmierer

Java 8 und JSR-308, was ist Stand der Dinge?

· Christian Ullenboom

Die Idee bei JSR-308: Annotationen an allem möglichen Typen dranmachen (daher auch der Name “Type Annotations”). Z.B. so:

Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

Mehr auch unter http://jcp.org/aboutJava/communityprocess/ec-public/materials/2012-01-1011/jsr308-201201.pdf oder in der Spec http://types.cs.washington.edu/jsr308/specification/java-annotation-design.html.

Mit dem aktuellen JDK 8 können zwar Annotationen deklariert werden, die für neue “Orte” stehen ( hat seit 1.8 TYPE_PARAMETER und TYPE_USE), aber sonst ist mit Standardcompiler nicht viel los. Testet man oberes Beispiel, gibt es nur Fehler:

@Target(value= ElementType.TYPE_USE)
@interface NonNull { }

@Target(value= ElementType.TYPE_USE)
@interface NonEmpty { }

@Target(value= ElementType.TYPE_USE)
@interface Readonly { }

class Document {}

class Main {
 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;
}

Dann rappelt es nur: C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: illegal start of type

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: ‚;‘ expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: <identifier> expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: <identifier> expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: ‚;‘ expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: <identifier> expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: ‚(‚ expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

C:\Users\Christian\Documents\NetBeansProjects\App\src\app\Main.java:53: error: <identifier> expected

 Map<@NonNull String, @NonEmpty List<@Readonly Document>> files;

Wenn man JSR-308 wirklich nutzen möchte, greift man zur experimentelle Version . Wenn Oracle hier alles für rund hält, wandert das in das normale OpenJDK 8 Projekt. Das ist wie mit Lambda und dem OpenJDK 8.

Wenn man dann einen funktionierenden Compiler und eine Unterstützung hat, die Annotationen auszulesen, kann ein Checker diverse Sachen testen. Interessant sind @NonNull-Dinger oder auch Test für Immutibility. Hier ist interessant, ein Checker-Framework, das in den Compiler integriert wird.

JSR-308 ist schon ewig im Gespräch, 2007 (!) hatte ich das schon im Blog:

Kategorien: Java 8

← Alle Beiträge