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 и т. д. будут вставлены в JDK или, если нам потребуется загрузить https://checkerframework.org/

2 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам