【问题标题】:Kotlin: How to inherit property in data classKotlin:如何继承数据类中的属性
【发布时间】:2017-10-10 15:42:30
【问题描述】:

我有这样声明的抽象 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

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

【问题讨论】:

    标签: inheritance kotlin data-class


    【解决方案1】:

    至少有两种解决方法:

    • 在数据类主构造函数声明中将open和override属性设为:

      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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2017-12-18
      • 1970-01-01
      相关资源
      最近更新 更多