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