我需要从数据类 B 继承数据类 A。我知道这在Kotlin 中是不可行的。
问题1:
为什么这不可行?
问题2:有
什么办法可以解决这个问题?
例子:
data class A(val data1 : String)
data class B(val data2 : String) : A()
Run Code Online (Sandbox Code Playgroud)
我如何在 Kotlin 中实现这一目标?
dey*_*dey 10
问题 1
Data 类包含一些生成的方法,如 hashCode、equals、copy、... 你可以在类扩展数据类中破坏这些方法,但 kotlin 需要保证它们正常工作。这就是使数据类无法扩展的原因。
问题2
唯一的解决方案是,当您需要两个数据类时,再创建一个抽象类并从中派生这两个数据类。需要注意的是,kotlin 中的数据类基于主构造函数创建 hashcode、equals 和 toString 等方法,这就是为什么需要在数据类构造函数中覆盖 Base 类中的字段的原因。
abstract class Base(open val data1: String)
data class A(override val data1: String): Base(data1)
data class B(override val data1: String, val data2: String): Base(data1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5842 次 |
| 最近记录: |