Kotlin:如何inheritance数据类中的属性

我有这样的抽象令牌类:

abstract class Token(var index: Int = 0) { open fun merge(toMerge: Token): Token? { return null } } 

我想inheritance数据类中的索引属性,如下所示:

 data class CloseLoop(index: Int, var openLoopIndex: Int = 0) : Token(index) 

但它给我错误Data class primary constructor must have only property (val / var) parameters

我需要做什么来解决这个问题?

至少有两个解决方法:

  • open属性并在数据类主构造函数声明中覆盖它:

     abstract class Token(open var index: Int = 0) data class CloseLoop( override var index: Int, var openLoopIndex: Int = 0 ) : Token(index) 
  • 用另一个名字声明一个属性并用它初始化基类:

     data class CloseLoop(val theIndex: Int, var openLoopIndex: Int = 0) : Token(theIndex) 

    如果您觉得合适,请将其设为不private