Выбор ответа Senior Классы, data и sealed обновлено

Когда value class упаковывается

Вопрос

В каком случае @JvmInline value class UserId(val value: Long) будет упакован в объект?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Как UserId?, аргумент дженерика или через интерфейс. Value class в большинстве мест заменяется на нижележащее значение: параметр UserId в байткоде будет long (а имя функции получит суффикс-хеш, чтобы не было конфликтов перегрузок).

Варианты ответа

  1. Как UserId?, аргумент дженерика или через интерфейсправильный ответ
  2. Всегда: value class это обычный класс с аннотацией
  3. Никогда: он всегда компилируется в примитив long
  4. При передаче в функцию с параметром типа UserId

Разбор

Value class в большинстве мест заменяется на нижележащее значение: параметр UserId в байткоде будет long (а имя функции получит суффикс-хеш, чтобы не было конфликтов перегрузок). Упаковка нужна, когда нужен объект: nullable-тип UserId? (для Long-основы), List<UserId> и другие дженерики, приведение к Any или интерфейсу. Поэтому «бесплатность» value class не абсолютная.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.