我想写这段代码,但是它不起作用。private var a: Int set(value) { field = a // Code }init { a = 2}当我定义时,我必须初始化变量......
我想写这段代码但是不起作用。
private var a: Int
set(value) {
field = a
// Code
}
init {
a = 2
}
声明变量时必须初始化变量。为什么会发生这种情况?我该如何解决?
也许你有另一个上下文,但基本上你可以通过为字段分配一个值来初始化它
private var a: Int = 3
这不会执行您的 setter。如果这是一个静态值(类的初始状态),那么应该没问题。
在块中运行时设置了 a
值 init
,并且它的值取决于某些现有逻辑,那么您可以使用属性委托
private var readWrite: Int by resourceDelegate()
fun resourceDelegate(): ReadWriteProperty<Any?, Int> =
object : ReadWriteProperty<Any?, Int> {
var curValue = 0
override fun getValue(thisRef: Any?, property: KProperty<*>): Int = curValue
override fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {
println("Setting value using resource delegate")
curValue = value
}
}
init {
readWrite = 4
}
可能还有其他解决方案,但为此我们需要更多地了解您的背景。