Поскольку до сих пор нет стандартной аннотации @Nullable
, вы используете аннотацию сторонней библиотеки, поэтому она зависит от того, как она объявлена. Аннотации до Java 8 не являются аннотациями типа, поскольку эта функция не существует в более старых версиях. Следовательно, с этими аннотациями вы всегда указываете параметр , а не его тип. Обычно это интерпретируется фреймворками как «параметр может быть null
», который был бы ссылкой на массив, хотя фреймворки могут обрабатывать varargs специально, но нет стандартного мандата определенного поведения.
При использовании реального Java 8 аннотации типа, т.е. аннотации с @Target(ElementType.TYPE_USE)
, результатом в лучше всего объяснить с помощью обычной декларации массива:
@Nullable ElementType []
объявляет массив @Nullable ElementType
, читать NULLABLE элементов, тогда как
ElementType @Nullable []
Объявить тип массива с нулевым значением.
, таким образом, декларация
public static String format(final String pattern, final @Nullable Object... arguments)
означает, что элементы могут быть null
тогда
public static String format(final String pattern, final Object @Nullable... arguments)
заявляет, что ссылка массив может быть null
. Конечно, вы можете объединить их, чтобы объявить, что как, элементы или сам массив, может быть null
public static String format(String pattern, @Nullable Object @Nullable ... arguments)
Как уже говорилось, использовать эти опции, вам нужен тип аннотации, который действительно объявлен Аннотации типа Java 8. Затем, чтобы обеспечить соблюдение описанной семантики, вам понадобится обновленная реализация фреймворка checker, совместимая с аннотациями типа Java 8.
Аннотации типа добавлены в Java 8 как часть JSR 308. – Tunaki