我正在尝试为Kotlin中的父母和孩子班实现最简洁的组合。
这就像我的班级样子。
sealed class Parent {
open val attribute : String = "initial value"
}
data class Child (
override val attribute: String
) : Parent ()
如果构造函数Child()为空,我想将attribute
的值设置为"initial value"
。
如果希望其他对象(不等于attribute
,我想有机会通过构造函数设置Child
对象的"initial value"
值
在科特林有可能吗?
答案 0 :(得分:0)
这是让子类重用超类的初始值的一种方法(在出现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
,因为您需要在那里有一个主构造函数。
以下将在调用“默认” "initial value"
构造函数时将属性设置为Child
:
sealed class Parent {
open val attribute : String = "initial value"
}
data class Child (override val attribute: String) : Parent() {
constructor() : this("initial value")
}
实际上,它是一个辅助构造函数。 因为如果子类中没有主类,则只能调用超级构造函数,因此其余选项很小。您可能需要重新设计类的层次结构,或者只是在某个位置保留一些常量。