Kotlin - 数据类可以继承

Sta*_*ack 3 android kotlin

我需要从数据类 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)