【发布时间】:2019-12-31 08:58:59
【问题描述】:
假设我有一个像这样的sealed class 层次结构:
sealed class A {
abstract val x: Int
abstract fun copyX(x1: Int): A
}
data class A1(override val x: Int, val s1: String) : A() {
override fun copyX(x1: Int): A {
return this.copy(x = x1)
}
}
data class A2(override val x: Int, val s2: String) : A() {
override fun copyX(x1: Int): A {
return this.copy(x = x1)
}
}
所有数据类都有x字段,并且应该提供方法copyX(x1: Int)来复制除x之外的所有字段,并用x1覆盖x。例如,
fun foo(a: A): A { a.copyX(100) }
上面的定义可能有效,但在所有数据类中重复 copyX 似乎非常笨拙。你会如何建议摆脱这个重复的copyX?
【问题讨论】:
-
请问您在现实生活中的用例是什么?过去我也遇到过类似的问题,我通常要么重复这样的声明,要么找到完整的其他方式。看起来您想通过使用这个密封类来抽象子类,但您仍然希望在复制时保留子类的实现,所以我想知道您的需求是什么。
-
@Joffrey 恐怕实际用例现在描述起来有点太复杂了。谢谢你的提问。
标签: kotlin sealed-class