如何用toString扩展一个数据类

我已经创建了一个数据类

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

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

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

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

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

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

但在你的情况下,没有什么能阻止你重写toStringSomething类的主体中,因为data类可以像常规类一样拥有主体:

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