【问题标题】:kotlin: set default values for a parent classkotlin:为父类设置默认值
【发布时间】:2018-07-27 15:06:48
【问题描述】:

我正在尝试在 Kotlin 中为父类和子类实现最简洁的组合。

这就像我的课程的样子。

sealed class Parent {
 open val attribute : String = "initial value"
}

data class Child (
  override val attribute: String
) : Parent ()

如果构造函数 Child() 为空,我希望将 attribute 值设置为 "initial value"

如果我希望它是其他东西(不等于"initial value"),我希望有机会通过构造函数设置attribute 对象的attribute

在 Kotlin 中可以吗?

【问题讨论】:

  • 你想专门用一个数据类来做这个吗?

标签: inheritance kotlin


【解决方案1】:

这是一种让您的子类重用超类的初始值的方法(在出现 data class Child 之前,这是一个有效的答案):

sealed class Parent(val attribute : String = "initial value")

class Child : Parent {
  constructor() : super()
  constructor(attribute: String) : super(attribute)
}

这样,cou 现在可以调用Child 的默认构造函数,这将导致"initial value" 或传递适当的属性。但是,这不适用于data class Child,因为您需要在那里有一个主构造函数。

以下将在调用“默认”Child-constructor时将属性设置为"initial value"

sealed class Parent {
  open val attribute : String = "initial value"
}

data class Child (override val attribute: String) : Parent() {
  constructor() : this("initial value")
}

实际上它是一个辅助构造函数。 如果子类中没有主构造函数,则只能调用超级构造函数,因此剩余的选项相当小。您可能想要重新设计您的类层次结构,或者只是在某处保持一些常量。

【讨论】:

  • 是的,有可能。但是父类的初始值根本没有帮助。我希望它能以某种方式播放。
  • 但是你覆盖它。也许您想要另一个构造?我更新了我的答案,向您展示了一种重用 super.attribute 的方法
  • 更新了答案以反映您的data class-usage。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多