Получить доступ

Что верно про varargs?

MiddleОсновы языка
Коротко

Varargs — сахар над массивом: внутри параметр — обычный массив, он единственный и последний, без аргументов приходит пустой массив, а не null. Каждый вызов выделяет массив — поэтому в JDK есть List.of с фиксированной арностью до 10.

  • Можно передать готовый массив напрямую
  • foo(null) — неоднозначность: null-массив или массив из null
  • Varargs с дженериками — предупреждение heap pollution, @SafeVarargs

А ещё Перегрузка с varargs выбирается в последнюю очередь

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Компилятор превращает вызов в создание массива, поэтому у varargs есть цена: на каждый вызов выделяется объект — в горячем коде для частых случаев обычно добавляют перегрузки с фиксированной арностью, что и сделано в JDK для List.of. Практические грабли: передача самого массива работает напрямую, а передача null или Object-аргумента даёт неоднозначность (например, вызов с одним null может быть истолкован как null-массив); сочетание varargs с дженериками порождает предупреждение о загрязнении кучи, которое подавляют аннотацией SafeVarargs на final- или static-методе.

Что хотят услышать

  • Устройство и правила.
  • Цена и подводные камни.

Частые ошибки

  • Ожидать null вместо пустого массива при вызове без аргументов.
  • Передавать null напрямую в varargs-параметр.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Внутри метода параметр является обычным массивом
  • ✓Параметр с многоточием должен быть последним в списке параметров
  • ✓При вызове без аргументов создаётся пустой массив, а не передаётся null
  • ✗Метод может иметь несколько varargs-параметров

Что спросят дальше

  • Что означает предупреждение о heap pollution и зачем нужен SafeVarargs?
  • Почему в JDK у List.of есть перегрузки на разное число аргументов?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем