Краткий ответ: переопределить toString () .
Java и Kotlin имеют стандартный способ преобразования любого объекта в строку: метод toString()
.
Это определено в классах верхнего уровня java.lang.Object и в kotlin.Any , поэтому каждый объект гарантированно имеет этот метод.Реализации там просто возвращают имя класса, за которым следуют '@' и шестнадцатеричное представление хеш-кода объекта .(Они должны работать для каждого возможного типа объекта, поэтому у них нет никакой другой информации для использования.)
Это то, что вы видите в своих выходных данных.
Если вы хотитечтобы ваш класс показывал что-то более значимое, вам следует переопределить метод toString()
в вашем классе Person
.Например, чтобы показать имя в соответствии с запросом:
override fun toString() = name
Однако на практике это не всегда лучший подход.toString()
будет вызываться всякий раз, когда ваши объекты печатаются в журналах, в сообщениях об ошибках и т. П., Поэтому более полезно иметь менее двусмысленное представление, например:
override fun toString() = "Person($name, $age)"
(В качестве альтернативы вы могли бысделайте его классом данных , который автоматически предоставит подходящую реализацию toString()
, наряду с некоторыми другими вещами.)
Когда вы хотите напечатать только затем имя, вы можете сделать это явно:
println(person.name)
Или вы можете предоставить отдельный метод для вызова, например:
fun toPrettyString() = name
, а затем:
println(person.toPrettyString())
Это сделает ваши намерения намного яснее.