Программа не компилируется: const val нельзя использовать для объекта Cat. Если заменить const val на val, вывод будет Cat(age=21, name=Sam).
Результат копирования data‑класса в Kotlin
Программа не компилируется: const val нельзя использовать для объекта Cat. Если заменить const val на val, вывод будет Cat(age=21, name=Sam).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой текст будет напечатан в консоль после запуска приведённой программы.
data class Cat(
val age: Int = 20,
val name: String = "Sam"
)
const val defaultCat: Cat = Cat()
fun main(args: Array<String>) {
println(defaultCat.copy(age = 21))
}
Ответ
Программа не компилируется: const val нельзя использовать для объекта Cat. Если заменить const val на val, вывод будет Cat(age=21, name=Sam).
Константы Kotlin ограничены поддерживаемыми примитивными типами и String и требуют константного выражения. Вызов конструктора Cat() таким выражением не является. После исправления copy создаёт новый экземпляр с age = 21, сохраняя name; defaultCat при этом остаётся с исходным age = 20.
Источник: kotlinlang.org.