我有多个扩展另一个类的类.其中一些类具有与基类不同的默认上下文.在其他编程语言中,这不是问题,但在Java/Kotlin中,这似乎是不可能的,因为属性显然不是首先初始化的,而是在构造函数之后初始化的.
举个例子可能会更简单:
fun main() {
var a = ClassA("ipsum")
}
abstract class Base(var word: String) {
open var defaultPrefix: String = "lorem ".also(::println)
init {
println("init Base")
word = defaultPrefix + word
println("final value of word is '$word'")
}
}
class ClassA(word: String) : Base(word) {
override var defaultPrefix: String = "foobar ".also(::println)
}
class ClassB(word: String) : Base(word) {
// methods will differ but it will have the same defaultContext as Base
}
不幸的是,这个代码不工作,因为defaultPrefix
是null
.
下面是输出:
lorem
init Base
final value of word is 'nullipsum'
foobar
显然,Base
类中的init
个在属性初始化之前被调用.
有没有办法在调用init之前初始化该属性,这样在我的示例中word
就是foobar ipsum
?