Kotlin:如何在数据类中继承属性

Yar*_*ick 3 inheritance kotlin data-class

我有像这样声明的抽象令牌类:

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

我想在数据类中继承index属性,如下所示:

data class CloseLoop(index: Int, var openLoopIndex: Int = 0) : Token(index)
Run Code Online (Sandbox Code Playgroud)

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

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

hot*_*key 11

至少有两种解决方法:

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

    abstract class Token(open var index: Int = 0)
    
    data class CloseLoop(
        override var index: Int, 
        var openLoopIndex: Int = 0
    ) : Token(index)
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用其他名称声明属性并使用它初始化基类:

    data class CloseLoop(val theIndex: Int, var openLoopIndex: Int = 0) : Token(theIndex)
    
    Run Code Online (Sandbox Code Playgroud)

    private你找到合适的.