Невозможно десериализовать массив JSON (например, [1,2,3]) в тип '', поскольку для типа требуется десериализация правильно (например, {"name": "value"})

Когда вы объявляете

public static void foo(List... bar), компилятор преобразует его в

public static void foo(List[] bar), затем в

public static void foo(List[] bar)

Тогда возникает опасность, что вы ошибочно назначите неверные значения в списке, а компилятор не вызовет никаких ошибок. Например, если T является String, тогда следующий код будет компилироваться без ошибок, но не будет работать во время выполнения:

// First, strip away the array type (arrays allow this kind of upcasting)
Object[] objectArray = bar;

// Next, insert an element with an incorrect type into the array
objectArray[0] = Arrays.asList(new Integer(42));

// Finally, try accessing the original array. A runtime error will occur
// (ClassCastException due to a casting from Integer to String)
T firstElement = bar[0].get(0);

Если вы рассмотрели метод, чтобы убедиться, что он не содержит таких уязвимостей, то вы можете аннотировать его с помощью @SafeVarargs для подавления предупреждения. Для интерфейсов используйте @SuppressWarnings("unchecked").

Если вы получите это сообщение об ошибке:

Метод Varargs может привести к загрязнению кучи от невосстанавливаемого параметра varargs

blockquote>

, и вы уверены, что ваше использование безопасно, тогда вы должны использовать @SuppressWarnings("varargs"). См. . Является ли @SafeVarargs подходящей аннотацией для этого метода? и https://stackoverflow.com/a/14252221/14731 для приятного объяснения этого второго рода ошибок.

Ссылки:

72
задан Lauren Van Sloun 28 November 2018 в 00:56
поделиться