Выбор ответа Senior Классы, data и sealed обновлено
Когда value class упаковывается
Вопрос
В каком случае @JvmInline value class UserId(val value: Long) будет упакован в объект?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Как UserId?, аргумент дженерика или через интерфейс. Value class в большинстве мест заменяется на нижележащее значение: параметр UserId в байткоде будет long (а имя функции получит суффикс-хеш, чтобы не было конфликтов перегрузок).
Варианты ответа
- Как
UserId?, аргумент дженерика или через интерфейсправильный ответ - Всегда: value class это обычный класс с аннотацией
- Никогда: он всегда компилируется в примитив
long - При передаче в функцию с параметром типа
UserId
Разбор
Value class в большинстве мест заменяется на нижележащее значение: параметр UserId в байткоде будет long (а имя функции получит суффикс-хеш, чтобы не было конфликтов перегрузок). Упаковка нужна, когда нужен объект: nullable-тип UserId? (для Long-основы), List<UserId> и другие дженерики, приведение к Any или интерфейсу. Поэтому «бесплатность» value class не абсолютная.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.