Параметр с переменной арностью с типом элемента, недоступным во время выполнения, может привести к замусориванию кучи и породить предупреждения о непроверяемом преобразовании во время компиляции.
Что означает параметр с переменной арностью?
Я думаю речь идет о 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей