在Kotlin扩展数据类

数据类似乎是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() 

事实是:数据类不能很好地继承。 我们正在考虑禁止或严格限制数据类的继承。 例如,众所周知,没有办法在非抽象类的层次上正确实现equals()

所以,我可以提供:不要使用数据类的继承。

在构造函数之外的超类中声明属性为abstract,并在子类中覆盖它们。

 abstract class Resource { abstract var id: Long abstract var location: String } data class Book ( override var id: Long = 0, override var location: String = "", var isbn: String ) : Resource()