kotlin - 如何使用 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 方法?

最佳答案

添加 .toString() 扩展函数不起作用,因为:

  • 扩展函数不能参与虚拟调用(they are resolved statically)。换句话说,扩展不能覆盖成员函数。
  • 如果有匹配的成员函数,则优先于扩展。如果你添加一个扩展函数fun Something.toString() = ...,那么s.toString()不会被解析到它,因为对应的成员继承了从 Any 获胜。

但在您的情况下,没有什么能阻止您在 Something 类主体中覆盖 toString,因为 data 类可以像常规类一样具有主体:

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

https://stackoverflow.com/questions/35970957/

相关文章:

android - Kotlin : safe lambdas (no memory leak)?

android - IllegalArgumentException : savedInstance

kotlin - Kotlin 中 with 和 run 的区别

java - 在使用 Kotlin 的方法中抛出异常

class - 我无法从 Kotlin 的嵌套类中联系到任何类成员

gradle - 为什么更新 Gradle 到 3.1.0 后显示 "3rd-party Gradl

android - 带有 Kotlin 的 Android 中的 HTTP 请求

kotlin - 如何获取给定密封类的所有子类?

kotlin - 如果可空类型为空,我如何运行代码块?

generics - Scala 2.10 中的具体泛型