在密封类中为抽象val赋值



我有一个密封类,从中继承了几个抽象类。由于密封类中有一堆字段需要在抽象类中初始化,所以我试图将其移动到二级构造函数,但是二级构造函数不允许我们声明override val字段,以使代码更加简洁。我唯一能想到的另一种方法是使字段lateinit var,但随后我就失去了不变性。

sealed class Animal {
abstract val object1 : SomeObject
abstract val object2 : SomeObject2
abstract val object3 : SomeObject3
abstract val object4 : SomeObject4
}
abstract class GrassEaterAnimal : Animal {
//trying to do this
constructor(override val object1 : SomeObject, override val object2 : SomeObject2, override val object3 : SomeObject3, override val object4 : SomeObject4, func : (field1, field2) -> Foo)
}

有没有一种方法可以让这个代码更干净,或者有任何其他建议可以在这种情况下提供帮助?

您可以在主构造函数中实现/初始化属性:

abstract class GrassEaterAnimal(
override val object1: SomeObject,
override val object2: SomeObject2,
override val object3: SomeObject3,
override val object4: SomeObject4,
) : Animal()

最新更新