Введите аннотацию (JSR 308) с Java 7?

Можем ли мы использовать аннотации типа JSR 308 в проекте Java 7 (например, @NonNull,...)? Если да, какова связанная зависимость maven?


person Aure77    schedule 29.03.2016    source источник


Ответы (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>
person AndyN    schedule 29.03.2016
comment
Спасибо. Я проверю это. - person Aure77; 04.04.2016

Я предполагаю, что под «проектом Java 7» вы подразумеваете «проект, который можно скомпилировать с помощью компилятора Java 7». Аннотации типов — это функция Java 8. Как и лямбда-выражения, если вы их используете, ваш код не может быть скомпилирован стандартным компилятором Java 7.

Существует специальный компилятор, компилятор аннотаций типов, который читает введите аннотации, написанные в комментариях, например List</*@NonNull*/ String>. Когда вы компилируете такой файл с помощью обычного компилятора Java 7, этот компилятор игнорирует комментарии. Вот как ваш код может использовать аннотации обоих типов и быть совместимым с Java 7.

Checker Framework упаковывает специальный компилятор вместе с обработчиками аннотаций, которые предупреждают о неправильных @NonNull аннотациях и о возможных исключениях нулевого указателя в вашем код. Вы можете увидеть его обсуждение аннотаций. в комментариях.

Существует интеграция Maven для Checker Framework. Вы захотите выбрать направления Java 7.

person mernst    schedule 30.03.2016