【发布时间】:2014-12-14 03:59:07
【问题描述】:
数据类似乎是 Java 中老式 POJO 的替代品。这些类允许继承是可以预料的,但我看不出扩展数据类的方便方法。我需要的是这样的:
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
上面的代码由于component1() 方法的冲突而失败。将data 注释仅留在其中一个类中也不起作用。
也许还有另一种方式来扩展数据类?
UPD:我可能只注释子子类,但data 注释只处理构造函数中声明的属性。也就是说,我必须声明所有父级的属性open 并覆盖它们,这很难看:
open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
override var id: Long = 0,
override var location: String = "",
var isbn: String
) : Resource()
【问题讨论】:
-
Kotlin 隐式创建方法
componentN(),返回第 N 个属性的值。请参阅 Multi-Declarations 上的文档 -
打开属性,也可以做Resource抽象或者使用编译器插件。 Kotlin 对开放/封闭原则非常严格。
-
@Dmitry 由于我们无法扩展数据类,您的“解决方案”是否会保持父类变量打开并简单地在子类中覆盖它们?
标签: inheritance kotlin abstract data-class