Я создал dataclass
data class Something ( val a : String, val b : Object, val c : String )
как позже в моей программе мне нужно строковое представление этого dataclass, я попытался расширить метод toString.
override fun Something.toString() : String = a + b.result() + c
Проблема здесь заключается в том, что она не позволяет расширить (переопределить) функцию toString, поскольку она не применима к функциям верхнего уровня.
Как правильно переопределить / расширить метод toString пользовательского dataclass?
В Kotlin функции расширения не могут переопределять функции-члены, более того, они разрешаются статически . Это означает, что если вы напишете функцию расширения fun Something.toString() = ...
, s.toString()
не будет разрешена к ней, потому что член всегда побеждает .
Но в вашем случае ничто не мешает вам переопределить toString
внутри тела чего- Something
типа, поскольку классы data
могут иметь тела, подобные обычным классам:
data class Something( val a: String, val b: Any, val c: String ) { override fun toString(): String = a + b + c }