2016-03-13 8 views
11

ich ein DataclassWie ein Dataclass mit toString erweitern

data class Something (
    val a : String, 
    val b : Object, 
    val c : String 
) 

wie später in meinem Programm erstellt haben, muss ich die Stringdarstellung dieses Dataclass Ich versuchte, die toString Methode zu erweitern.

override fun Something.toString() : String = a + b.result() + c 

Das Problem hier ist, ist es nicht erlaubt (übergeordneten) die toString funtion erstreckt, wie es nicht für Top-Level-Funktionen ist.

Wie überschreiben/erweitern Sie die toString-Methode einer benutzerdefinierten Datenklasse richtig?

+0

Kotlin haben auch recht nett toString() Implementierung standardmäßig, dass Drucken Sie alle Mitglieder der Datenklasse. Also reicht es in den meisten Fällen zum Debuggen usw. – Sonique

Antwort

24

In Kotlin können Erweiterungsfunktionen die Elementfunktionen nicht überschreiben, außerdem they are resolved statically. Wenn Sie eine Erweiterungsfunktion fun Something.toString() = ... schreiben, wird s.toString() nicht aufgelöst, da Mitglied immer gewinnt.

Aber in Ihrem Fall nichts hält von Ihnen toString innerhalb Something Klasse Körper überschreiben, weil data Klassen Körper wie normale Klassen haben:

data class Something(
    val a: String, 
    val b: Any, 
    val c: String 
) { 
    override fun toString(): String = a + b + c 
}