Можем ли мы использовать аннотации типа JSR 308 в проекте Java 7 (например, @NonNull
,...)? Если да, какова связанная зависимость maven?
Введите аннотацию (JSR 308) с Java 7?
Ответы (2)
Да... вроде. Аннотации типов были введены в Java 8, поэтому они вообще не работают в Java 7. А реализация OpenJDK JSR 308, например, есть в OpenJDK 8 JDK. Так что вы не можете использовать это.
Но вы можете использовать структуру проверки, которая позволяет обойти это, позволяя вам комментировать аннотации типов в Java 7, но по-прежнему их использовать. Установка описана здесь. Вам понадобится следующая зависимость maven:
<dependency>
<groupId>org.checkerframework</groupId>
<artifactId>checker</artifactId>
<version>1.9.12</version>
</dependency>
Я предполагаю, что под «проектом Java 7» вы подразумеваете «проект, который можно скомпилировать с помощью компилятора Java 7». Аннотации типов — это функция Java 8. Как и лямбда-выражения, если вы их используете, ваш код не может быть скомпилирован стандартным компилятором Java 7.
Существует специальный компилятор, компилятор аннотаций типов, который читает введите аннотации, написанные в комментариях, например List</*@NonNull*/ String>
. Когда вы компилируете такой файл с помощью обычного компилятора Java 7, этот компилятор игнорирует комментарии. Вот как ваш код может использовать аннотации обоих типов и быть совместимым с Java 7.
Checker Framework упаковывает специальный компилятор вместе с обработчиками аннотаций, которые предупреждают о неправильных @NonNull
аннотациях и о возможных исключениях нулевого указателя в вашем код. Вы можете увидеть его обсуждение аннотаций. в комментариях.
Существует интеграция Maven для Checker Framework. Вы захотите выбрать направления Java 7.