在 sealed class 中为抽象 val 赋值

Assigning abstract val a value in sealed class

我有一个密封的 class,从中继承了几个抽象 classes。由于 sealed class 中有一堆字段需要在抽象 class 中初始化,我试图将其移动到辅助构造函数但是辅助构造函数不允许我们声明 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)
}

有没有办法使此代码更清晰或有任何其他建议可以帮助解决这种情况?

您可以 implement/initialize 主构造函数中的属性:

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