如何使用toString扩展数据类

Ale*_*dar 35 kotlin kotlin-extension data-class

我创建了一个数据类

data class Something (
    val a : String,
    val b : Object,
    val c : String
)
Run Code Online (Sandbox Code Playgroud)

在我的程序中稍后我需要这个数据类的字符串表示我试图扩展toString方法.

override fun Something.toString() : String = a + b.result() + c
Run Code Online (Sandbox Code Playgroud)

这里的问题是,它不允许扩展(覆盖)toString功能,因为它不适用于顶级功能.

如何正确覆盖/扩展自定义数据类的toString方法?

hot*_*key 61

在Kotlin中,扩展函数不能覆盖成员函数,而且它们是静态解析的.这意味着如果你编写一个扩展函数fun Something.toString() = ...,s.toString()将无法解析它,因为成员总是获胜.

但是在你的情况下,没有什么可以阻止你覆盖toString内部Something类体,因为data类可以像常规类一样拥有体:

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