Что верно про varargs?
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 есть перегрузки на разное число аргументов?
Разбор темы
- Методы: pass-by-value, перегрузка, varargs
Почему Java всегда pass-by-value, разрешение перегрузки на этапе компиляции и устройство varargs.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.