0

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

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

4

1 回答 1

6

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

abstract class GrassEaterAnimal(
    override val object1: SomeObject,
    override val object2: SomeObject2,
    override val object3: SomeObject3,
    override val object4: SomeObject4,
) : Animal()
于 2021-11-25T14:44:50.343 回答