Выбор ответа Middle Java-интероп обновлено
@JvmField и const val
Вопрос
Чем @JvmField val x = Foo() в companion object отличается от обычного val x = Foo()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Поле публикуется напрямую, без геттера: User.x. Свойство Kotlin это приватное поле плюс геттер. @JvmField убирает геттер и делает само поле публичным, для companion object статическим в классе.
Варианты ответа
- Ничем, это только подсказка для IDE
@JvmFieldделаетvalизменяемым полем для Java- Поле публикуется напрямую, без геттера:
User.xправильный ответ @JvmFieldвычисляет значение лениво при первом обращении
Разбор
Свойство Kotlin это приватное поле плюс геттер. @JvmField убирает геттер и делает само поле публичным, для companion object статическим в классе. Изменяемым val от этого не становится. const val похож, но только для констант времени компиляции (примитивы и String), а @JvmField подходит для любых объектов. Ленивости аннотация не даёт.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.