Вопрос с собеседования · Java

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

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

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

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

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

Подробно

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

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

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

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

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

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

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

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

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования