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 позволяет вам использовать окончательную версию библиотеки во время выполнения и даже во время компиляции, в то время как при проверке с подключаемым типом видны аннотации и, следовательно, результаты проверки типов являются более точными.