How to extend a dataclass with toString

吃可爱长大的小学妹 提交于 2019-12-18 05:27:06

问题


I have created a dataclass

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

as later in my program I need the string representation of this dataclass I tried to extend the toString method.

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

The problem here is, it does not allow extending(overriding) the toString funtion, as it is not applicable to top level functions.

How to properly override/extend the toString method of a custom dataclass?


回答1:


In Kotlin, extension functions cannot override member functions, moreover, they are resolved statically. It implies that if you write an extension function fun Something.toString() = ..., s.toString() won't be resolved to it, because member always wins.

But in your case, nothing stops you from overriding toString inside Something class body, because data classes can have bodies just like regular classes:

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


来源:https://stackoverflow.com/questions/35970957/how-to-extend-a-dataclass-with-tostring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!