---
title: 'Java 8 und JSR-308, was ist Stand der Dinge?'
url: 'https://www.tutego.de/blog/javainsel/2013/01/java-8-und-jsr-308-was-ist-stand-der-dinge'
markdown: 'https://www.tutego.de/blog/javainsel/2013/01/java-8-und-jsr-308-was-ist-stand-der-dinge.md'
date: '2013-01-09'
description: '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-201…'
taxonomy:
  category:
    - 'Java 8'
---

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

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://www.tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://www.tutego.de/blog/javainsel/)

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

09.01.2013 · [Christian Ullenboom](https://www.tutego.de/blog/javainsel/author/admin/)

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

```java
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](http://jcp.org/aboutJava/communityprocess/ec-public/materials/2012-01-1011/jsr308-201201.pdf "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](http://types.cs.washington.edu/jsr308/specification/java-annotation-design.html "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:

```java
@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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

```java
 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](https://www.tutego.de/blog/javainsel/category/java-8/)

[← Alle Beiträge](https://www.tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [Erste Libs springen auf Java 8 auf](https://www.tutego.de/blog/javainsel/2013/01/erste-libs-springen-auf-java-8-auf.md)
- Next: [Funktionale Schnittstellen mit @FunctionalInterface dokumentierten](https://www.tutego.de/blog/javainsel/2013/01/funktionale-schnittstellen-mit-functionalinterface-dokumentierten.md)
