Когда вы объявляете
public static
, компилятор преобразует его в
public static
, затем в
public static
Тогда возникает опасность, что вы ошибочно назначите неверные значения в списке, а компилятор не вызовет никаких ошибок. Например, если 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 для приятного объяснения этого второго рода ошибок.Ссылки: