Поскольку стандартной аннотации @Nullable
по-прежнему нет, вы используете аннотацию сторонней библиотеки, поэтому это зависит от того, как она объявлена. Аннотации до Java 8 не являются аннотациями типов, поскольку в более ранних версиях эта функция отсутствует. Следовательно, с помощью этих аннотаций вы всегда аннотируете параметр, а не его тип. Обычно это интерпретируется фреймворками как «параметр может быть null
», который будет ссылкой на массив, хотя фреймворки могут специально обрабатывать varargs, но нет стандарта, предписывающего конкретное поведение.
Когда вы используете реальную аннотацию типа Java 8, то есть аннотацию с @Target(ElementType.TYPE_USE)
, результат лучше всего объясняется с помощью обычного объявления массива:
@Nullable ElementType []
объявляет массив из @Nullable ElementType
, считывает элементы, допускающие значение NULL, тогда как
ElementType @Nullable []
объявить тип массива, допускающий значение NULL.
таким образом, декларация
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. Затем, чтобы применить описанную семантику, вам потребуется актуальная реализация фреймворка проверки, совместимая с аннотациями типа Java 8.
person
Holger
schedule
01.09.2015