【发布时间】:2016-12-19 16:04:05
【问题描述】:
从Kotlin documentation 开始,允许自定义设置器:
class Test {
var stringRepresentation: String
get() = field
set(value) {
setDataFromString(value)
}
init {
stringRepresentation = "test"
}
private fun setDataFromString(value: String) { }
}
但是你不能有一个没有自定义 getter 的自定义 setter(并从 init 块初始化):
class Test {
// Compilation error: "Property must be initialized"
var stringRepresentation: String
set(value) {
setDataFromString(value)
}
init {
stringRepresentation = "test"
}
private fun setDataFromString(value: String) { }
}
虽然您可以在没有自定义 setter 的情况下使用自定义 getter,但这里没有问题:
class Test {
var stringRepresentation: String
get() = field
init {
stringRepresentation = "test"
}
private fun setDataFromString(value: String) { }
}
那么为什么不能使用自定义设置器和从init 块中初始化的属性,为什么init 块在属性初始化器直接分配时调用自定义设置器,绕过自定义设置器?
class Test {
var stringRepresentation: String = "" // Does not call custom setter
set(value) {
setDataFromString(value)
}
init {
stringRepresentation = "test" // Calls custom setter
}
private fun setDataFromString(value: String) { }
}
【问题讨论】:
标签: kotlin