Которая @NonNull Java-аннотация для использования
Какая лучшая аннотация NoNull?
«Лучшее» в смысле
- Стандартный способ, например, будущая проверка (например, поддержка стандартного jdk и т. Д.)
- Поддержка IDE (отображается в java-документе, чтобы указать использование для разработчиков)
- Поддержка статическими инструментами анализа, такими как findbugs
- Поддержка анализа времени выполнения
Вот как выглядит мир в настоящее время – оценивается любое дальнейшее понимание:
- Почему int num = Integer.getInteger («123») бросает NullPointerException?
- java.lang.NullPointerException: попытка вызвать виртуальный метод для ссылки на нулевой объект
- getActionBar () возвращает Null (AppCompat-v7 21)
- Ошибка вызывает виртуальный метод 'double android.location.Location.getLatitude ()' в ссылке на нулевой объект
- Android - NullPointerException в SearchView в панели действий
-
javax.validation.constraints.NotNull
( Документы )
+ пакет javax, таким образом, выглядит будущим
– Часть JEE, а не JSE. В JSE необходимо импортировать дополнительные библиотеки .
– Не поддерживается инструментами статического анализа (только проверка выполнения) -
( docs )edu.umd.cs.findbugs.annotations.NonNull
– внешняя библиотека, а не пакетjavax
– устарел, так как findbugs версии 3.X
+ используется для статического анализа (с помощью findbugs и, следовательно, Sonar) -
( docs )javax.annotation.Nonnull
+ используется для статического анализа (в findbugs)
– JSR-305 неактивен / мертв / неизвестен, как указано в списке рассылки fb . Автор Билл Пью, даже если прямо спросил, не прокомментировал состояние в течение многих лет … -
( документы , интересная презентация )org.eclipse.jdt.annotation_2.0.0
+ используется для статического анализа (в eclipse не в findbugs)
– проприетарное затмение (не пыталось использовать их автономно) -
( docs )org.jetbrains.annotations.NotNull
+ используется для статического анализа (в 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, но я с нетерпением жду других просмотров …
[отказ от ответственности] Я знаю, что вопрос был задан здесь, однако ответа не было (или ответ был неправильным / неполным / устаревшим) [/ отказ от ответственности]
- Исключение Null Pointer при использовании Java Compiler API
- Tricky trernary operator в Java - автобоксинг
- Null check chain vs catching NullPointerException
- Что такое исключение NullPointerException и как его исправить?
- Почему мое Spring @Autowired поле null?
- Android startCamera дает мне null Intent и ... разрушает мою глобальную переменную?
- Это плохая идея, если equals (null) вместо NullPointerException выбрасывает?
- NullPointerException - доступ к представлениям в onCreate ()
Нет стандартной 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.