Которая @NonNull Java-аннотация для использования

Какая лучшая аннотация NoNull?

«Лучшее» в смысле

  • Стандартный способ, например, будущая проверка (например, поддержка стандартного jdk и т. Д.)
  • Поддержка IDE (отображается в java-документе, чтобы указать использование для разработчиков)
  • Поддержка статическими инструментами анализа, такими как findbugs
  • Поддержка анализа времени выполнения

Вот как выглядит мир в настоящее время – оценивается любое дальнейшее понимание:

  • javax.validation.constraints.NotNull ( Документы )
    + пакет javax, таким образом, выглядит будущим
    – Часть JEE, а не JSE. В JSE необходимо импортировать дополнительные библиотеки .
    – Не поддерживается инструментами статического анализа (только проверка выполнения)

  • edu.umd.cs.findbugs.annotations.NonNull ( docs )
    – внешняя библиотека, а не пакет javax
    – устарел, так как findbugs версии 3.X
    + используется для статического анализа (с помощью findbugs и, следовательно, Sonar)

  • javax.annotation.Nonnull ( docs )
    + используется для статического анализа (в findbugs)
    – JSR-305 неактивен / мертв / неизвестен, как указано в списке рассылки fb . Автор Билл Пью, даже если прямо спросил, не прокомментировал состояние в течение многих лет …

  • org.eclipse.jdt.annotation_2.0.0 ( документы , интересная презентация )
    + используется для статического анализа (в eclipse не в findbugs)
    – проприетарное затмение (не пыталось использовать их автономно)

  • org.jetbrains.annotations.NotNull ( docs )
    + используется для статического анализа (в intelliJ не в findbugs)
    – проприетарный для IntelliJ (но также общеansible как банку)

  • lombok.NonNull ( docs )
    + используется для управления генерацией кода
    – проприетарная аннотация

  • android.support.annotation.NonNull ( docs )
    + статический анализ в андроид-студии
    – андроидная специфическая аннотация

  • org.checkerframework.checker.nullness.qual.NonNull ( docs )
    + Реализация JSR308, которая является частью Java8 (которая представила возможность писать annotations в разных частях вашего кода, но не вводила новые annotations)
    + используется для статического кода (а не findbugs) и анализа времени выполнения
    – Внешняя библиотека, однако, кажется, одобрена java людьми

В настоящее время я склоняюсь к Framework Checker, но я с нетерпением жду других просмотров …

[отказ от ответственности] Я знаю, что вопрос был задан здесь, однако ответа не было (или ответ был неправильным / неполным / устаревшим) [/ отказ от ответственности]

Нет стандартной annotations @NonNull . Создание такой annotations было целью JSR 305, которая была оставлена ​​в течение длительного времени. Не будет стандартной annotations @NonNull до тех пор, пока JSR 305 не будет восстановлен. У Oracle нет текущих планов сделать это. (Аннотации JEE выходят за frameworks JSR 305.)

Для будущей защиты важно учитывать, является ли аннотация аннотацией типа или аннотацией объявления. Поскольку @NonNull заявляет свойство значения переменной, а не самой переменной, оно должно быть аннотацией типа. Являясь аннотацией типа, вы также можете записывать аннотацию в других местах, как в List<@NonNull String> .

Вы можете определить, является ли аннотация аннотацией типа, посмотрев мета-аннотацию @Target на определение annotations. На момент написания этой статьи кажется, что только версии Checker Framework и Eclipse являются аннотациями типа, поэтому я бы выбрал их над теми, которые являются аннотациями объявления. Обратите внимание, что разработчики любой из других аннотаций могут также обновить их как annotations типов; Я не знаю их планов.

Единственным недостатком является то, что использование annotations типа требует использования компилятора Java 8. В Framework Checker есть механизмы, позволяющие компилировать код, содержащий его annotations, компилятором Java 7.

  • Tricky trernary operator в Java - автобоксинг
  • Почему статические поля не инициализируются во времени?
  • Загрузите листок данных Excel в базу данных Oracle
  • вызов четкой и карты вместе бросает NPE в искровую библиотеку
  • Почему String.valueOf (null) вызывает исключение NullPointerException?
  • Null check chain vs catching NullPointerException
  • Атрибут checkbox seleniumа "checked"
  • Java-массив, NullPointerException?
  • Преобразование объекта Date в объект календаря
  • Исключение нулевого указателя
  • Java условный оператор?: Тип результата
  • Interesting Posts

    Как продвигать определенный номер сборки с другой работы в Дженкинсе?

    Почему эти уравнения деления приводят к нулю?

    Самый быстрый способ открыть cmd в текущей папке по ярлыку (windows 8/10)?

    Где хранить скрипты bash, которые все пользователи могут выполнять на Debian?

    Нужно уточнить, какой размер жесткого диска IDE-2,5 дюйма или 3,5 дюйма – значит

    Как распространять столбцы с повторяющимися идентификаторами?

    Как получить последнюю запись от Sqlite?

    Альтернативы Thread.Sleep ()

    .NET TimeZoneInfo из часового пояса Олсона

    Правильный способ совместного использования JQuery-Mobile / Phonegap?

    Справка regex по unix df

    Камера в Android, как получить лучший размер, размер предварительного просмотра, размер изображения, размер изображения, искаженное изображение

    Каков наилучший способ заставить TFS выводить каждый проект в свой собственный каталог?

    представление ловушки

    Есть ли способ сделать #define внутри другого #define?

    Давайте будем гением компьютера.