Java 8, аннотации типа и JSR 308

Я установил последний JDK 8 (b116), но я заметил, что не могу использовать аннотации типов. Например, чтение учебника Java, если я пишу:

String str = null;
String myString = (@NonNull String) str;

или

TEST st = new @Interned TEST();

компилятор дает мне следующую ошибку:

annotation type not applicable to this kind of declaration

теперь все работает. Перед использованием аннотаций типа мы должны аннотировать аннотацию с @Target(ElementType.TYPE_USE). Посмотрите на комментарии ниже!

Я также не понимаю, если аннотации, как:NonNull, Interned, etc. будет вставлено в JDK или если нам нужно загрузить Checker Framework

2 ответов


вы ответили на первую часть вашего вопроса.

для второй части:

Я также не понимаю, если аннотации, как:NonNull, Interned, etc. будет вставлен в JDK или если нам нужно загрузить фреймворк проверки.

аннотации - это просто своего рода класс / интерфейс Java. Они должны быть определены в исходном коде и скомпилировать.

в идеале вы должны окончательно источник файлы кода и / или байт-кода, полученные из канонического места. Однако, если вы должны были воспроизвести основные части исходного кода аннотаций (имя пакета, имя аннотации, имена полей и тип) и скомпилировать его, остальная часть JVM не будет мудрее.

но когда вы говорите о конкретной аннотации как @NonNull и @Interned, вы должны понимать, что могут существовать несколько версий в разных пакетах. Это может вызвать проблемы (для аннотации обработка программного обеспечения) до появления стандартных / defacto стандартных версий. Я не знаю, можно ли назвать структуру шашек стандартом defacto ... еще.

вы спросили, будут ли добавлены аннотации шашек в библиотеку Java 8. Я лично сомневаюсь в этом, потому что имя пакета для этих аннотаций было бы неприемлемым. Но поживем-увидим ...


для второй части:

Я также не понимаю, если аннотации, такие как: NonNull, Interned, так далее. будет вставлен в JDK или если нам придется загрузить Checker Рамки.

Oracle-distributed JDK не содержит аннотаций, таких как @NonNull и @Interned -- ни их определения, ни вхождения их в методы JDK.

однако платформа Checker содержит аннотированные версии JDK, как описано в the Checker Framework руководство. Платформа Checker позволяет использовать окончательную версию библиотеки во время выполнения и даже во время компиляции, в то время как подключаемая проверка типов видит аннотации и, следовательно, результаты проверки типов более точны.