Параметр с переменной арностью с типом элемента, недоступным во время выполнения, может привести к замусориванию кучи и породить предупреждения о непроверяемом преобразовании во время компиляции.
Что означает параметр с переменной арностью?
Я думаю речь идет о varargs
:
void method(String ... strings){
for(String str: strings)
System.out.println(str);
}
method("hello");
method("hello","world");
А данное предупреждение выводится, когда у параметра подразумевается параметризированный generic
'ами тип.
<T> void method(Iterator<T> iterators){
,,,
}
Чтобы понять, почему это происходит, нужно разобраться, как работают varargs
. Приведенный выше метод, преобразуется в такой:
<T> void method(Iterator<T>[]array){
...
}
А при вызове, параметры записываются в созданный массив:
method(new Iterator[]{param1,param2});
Заметьте, что при создании массива нельзя указать generic
, т.е. фактически создается массив объектов типа Iterator
с параметризированный типом Object
. Из за этого могут возникнуть проблемы, о чем компилятор вежливо и сообщает.
Убрать предупреждение можно пометив метод аннотацией @SuppressWarnings("unchecked")
, либо начиная с java 7 @SafeVarargs
Столкнулся с проблемой создания ограничивающей фигуры для 3D объекта моделька которого состоит из множества Mesh Для создаия ограничивающей...
Пытаюсь протестировать контроллер, у которого есть @PreAuthorize и сервис, который надо подменить заглушкой
В данной теме я узнал, как получить PID процессаИз выведенного списка все процессы Java отображаются просто java