【发布时间】:2022-01-03 20:01:56
【问题描述】:
我有一个密封类,几个抽象类继承自该类。由于密封类中有一堆字段需要在抽象类中初始化,我试图将其移至辅助构造函数,但是辅助构造函数不允许我们声明 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)
}
有没有办法让这段代码更简洁,或者有什么其他建议可以帮助解决这种情况?
【问题讨论】:
-
您在“抽象”之后缺少关键字“类”。
-
最后一个
func参数在那里做什么? -
谢谢。我会添加它:)
-
为什么不使用主构造函数?
-
如果有人调用
GrassEaterAnimal的主构造函数怎么办?这些字段将被初始化为什么?
标签: kotlin inheritance abstract-class sealed-class