Een dataklasse uitbreiden met toString

Ik heb een gegevensklasse gemaakt

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

zoals later in mijn programma, heb ik de tekenreeksweergave van deze gegevensklasse nodig. Ik heb geprobeerd de methode toStringuit te breiden.

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

Het probleem hier is dat het niet is toegestaan ​​om de functie toStringuit te breiden (te negeren), omdat het niet van toepassing is op functies op het hoogste niveau.

Hoe kan ik de toString-methode van een aangepaste dataklasse op de juiste manier overschrijven/uitbreiden?


Antwoord 1, autoriteit 100%

In Kotlin kunnen extensiefuncties lidfuncties niet overschrijven, bovendien ze zijn dat wel statisch opgelost. Het houdt in dat als je een extensiefunctie fun Something.toString() = ...schrijft, s.toString()er niet naar wordt omgezet, omdat lid wint altijd.

Maar in jouw geval weerhoudt niets je ervan toStringbinnen de Somethingbody van de klasse te overschrijven, omdat data-klassen lichamen kunnen hebben, net als gewone klassen :

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

Other episodes