2016-03-13 24 views
11

Ho creato una classe di datiCome estendere un classe di dati con toString

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

come più tardi nel mio programma ho bisogno la rappresentazione di stringa di questa classe di dati ho cercato di estendere il metodo toString.

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

Il problema è, esso non consente allungabile (overriding) il funtion toString, in quanto non è applicabile alle funzioni di livello superiore.

Come sovrascrivere/estendere correttamente il metodo toString di un dataclass personalizzato?

+0

Kotlin hanno anche abbastanza bello toString() implementazione di default, che stampa tutti i membri della classe dati. Quindi nella maggior parte dei casi è sufficiente per il debugging ecc. – Sonique

risposta

24

In Kotlin, le funzioni di estensione non possono ignorare le funzioni membro, inoltre, they are resolved statically. Ciò implica che se si scrive una funzione di estensione fun Something.toString() = ..., s.toString() non verrà risolta, poiché il membro vince sempre.

ma nel tuo caso, nulla vi impedisce di ignorare toString all'interno Something corpo della classe, perché data classi possono avere corpi proprio come classi regolari:

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