Я новичок в Kotlin, и я пробовал примеры в документации для пользовательских делегированных свойств.
https://try.kotlinlang.org/#/Examples/Delegated%20properties/Custom%20delegate/Custom%20delegate.kt
обычно при переопределении метода toString, я ограничиваю поля, которые яхотите печатать как в предоставленном коде.
В этом случае, p является delagated свойством, где мы используем thisref в строке getValue (). Поэтому здесь возникает проблема переполнения стека из-за рекурсивных вызовов.
class Example {
var p: String by Delegate()
var q: String = "testQ"
override fun toString() = "Example[p=$p]"
}
class Delegate() {
operator fun getValue(thisRef: Any?, prop: KProperty<*>): String {
return "$thisRef, thank you for delegating '${prop.name}' to me!"
}
operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: String) {
println("$value has been assigned to ${prop.name} in $thisRef")
}
}
Поскольку делегированные свойства предназначены для общей библиотеки, есть ли какие-то ограничения на метод переопределения toString (), которому мы должны следовать.