7

我有这样声明的抽象 Token 类:

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

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

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

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

我必须做些什么来解决这个问题?

4

1 回答 1

16

至少有两种解决方法:

  • 在数据类主构造函数声明中创建属性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你觉得合适就去做。

于 2017-10-10T15:49:09.737 回答