Которая @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.

  • NullPointerException в Java без StackTrace
  • Можно ли запрограммировать NullPointerException?
  • Загрузчик содержимого Android SDK не работает с NullPointerException
  • Булевы, условные операторы и автобоксинг
  • Java 8 NullPointerException в Collectors.toMap
  • java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 1888, result = 0, data = null} для активности
  • java.lang.NullPointerException выбрасывается с использованием ссылки на метод, но не lambda-выражения
  • android.app.Application не может быть создан из-за NullPointerException
  • Java условный оператор?: Тип результата
  • NullPointerException при создании массива объектов
  • Местоположение JavaFX не установлено сообщение об ошибке
  • Interesting Posts
    Давайте будем гением компьютера.