Нет никакого стандарта @NonNull
аннотация. Создание такой аннотации было целью JSR 305, от которого отказывались в течение долгого времени. Не будет стандарта @NonNull
аннотация, пока JSR 305 не будет воссоздан. Oracle не имеет никаких текущих планов сделать так. (Аннотации JEE выходят за рамки JSR 305.)
Для futureproofing, наиболее важный фактор для рассмотрения - является ли аннотация аннотацией типа или аннотацией объявления. Поскольку @NonNull
состояния свойство значения переменной, а не самой переменной, это должна быть аннотация типа. Быть аннотацией типа также позволяет аннотации быть записанной на большем количестве местоположений, как в List<@NonNull String>
.
можно определить, является ли аннотация аннотацией типа путем рассмотрения @Target
метааннотация на определение аннотации. С этой записи кажется, что только Платформа Средства проверки и версии Eclipse являются аннотациями типа, таким образом, я предпочел бы их тем, которые являются аннотациями объявления. Обратите внимание, что разработчики любой из других аннотаций могли обновить их, чтобы быть аннотациями типа также; я не знаю об их планах.
единственный недостаток - то, что использование аннотации типа требует использования компилятора Java 8. Платформа Средства проверки имеет механизмы для разрешения коду, содержащему его аннотации быть скомпилированной компилятором Java 7.