Параметр с переменной арностью

326
17 января 2017, 23:36

Параметр с переменной арностью с типом элемента, недоступным во время выполнения, может привести к замусориванию кучи и породить предупреждения о непроверяемом преобразовании во время компиляции.

Что означает параметр с переменной арностью?

Answer 1

Я думаю речь идет о 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

READ ALSO
Ограничивающая фигура динамического 3D объекта, библиотека Bullet

Ограничивающая фигура динамического 3D объекта, библиотека Bullet

Столкнулся с проблемой создания ограничивающей фигуры для 3D объекта моделька которого состоит из множества Mesh Для создаия ограничивающей...

349
Spring security, тестирование MVC и заглушка для сервисов

Spring security, тестирование MVC и заглушка для сервисов

Пытаюсь протестировать контроллер, у которого есть @PreAuthorize и сервис, который надо подменить заглушкой

398
Tesseract Android Java. Ошибка подключения языка

Tesseract Android Java. Ошибка подключения языка

За основу беру эту статьюhttp://www

326
Получения фокуса окна по PID

Получения фокуса окна по PID

В данной теме я узнал, как получить PID процессаИз выведенного списка все процессы Java отображаются просто java

332