Выбор ответа Middle Java-интероп обновлено

@JvmField и const val

Вопрос

Чем @JvmField val x = Foo() в companion object отличается от обычного val x = Foo()?

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

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

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

Коротко

Правильный ответ: Поле публикуется напрямую, без геттера: User.x. Свойство Kotlin это приватное поле плюс геттер. @JvmField убирает геттер и делает само поле публичным, для companion object статическим в классе.

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

  1. Ничем, это только подсказка для IDE
  2. @JvmField делает val изменяемым полем для Java
  3. Поле публикуется напрямую, без геттера: User.xправильный ответ
  4. @JvmField вычисляет значение лениво при первом обращении

Разбор

Свойство Kotlin это приватное поле плюс геттер. @JvmField убирает геттер и делает само поле публичным, для companion object статическим в классе. Изменяемым val от этого не становится. const val похож, но только для констант времени компиляции (примитивы и String), а @JvmField подходит для любых объектов. Ленивости аннотация не даёт.

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

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

Термины по теме