J'ai créé une classe de données
data class Something (
val a : String,
val b : Object,
val c : String
)
comme plus tard dans mon programme, j'ai besoin de la représentation sous forme de chaîne de cette classe de données, j'ai essayé d'étendre la méthode toString.
override fun Something.toString() : String = a + b.result() + c
Le problème ici est qu'il ne permet pas d'étendre (remplacer) la fonction toString, car il n'est pas applicable aux fonctions de niveau supérieur.
Comment remplacer/étendre correctement la méthode toString d'une classe de données personnalisée?
Dans Kotlin, les fonctions d'extension ne peuvent pas remplacer les fonctions membres, de plus, elles sont résolues statiquement . Cela implique que si vous écrivez une fonction d'extension, fun Something.toString() = ...
, s.toString()
ne sera pas résolu, car le membre gagne toujours .
Mais dans votre cas, rien ne vous empêche de remplacer toString
à l'intérieur du corps de classe Something
, car les classes data
peuvent avoir des corps comme les classes normales:
data class Something(
val a: String,
val b: Any,
val c: String
) {
override fun toString(): String = a + b + c
}