初始化有getter和setter的字段?
我在Kotlin创建了一个有示例字段的类
class SomeClass { var smth: String = "Initial value" get() = "Here it is" set(value) { field = "it is $value" } }
当我创建一个类的对象并调用smth
字段时,它将会调用get()
属性。
val myValue = SomeClass().smth// myValue = "Here it is"
所以,问题是:为什么我们必须初始化一个有getter的字段?
var smth: String // Why this gives error? get() = "Here it is" set(value) { field = "it is $value" }
它将始终从get()
属性返回值,不是吗?
我只是认为这是因为编译器不够聪明,推断它不是null。
其实一个非常类似的代码从这里的官方文档https://kotlinlang.org/docs/reference/properties.html
var stringRepresentation: String get() = this.toString() set(value) { setDataFromString(value) // parses the string and assigns values to other properties }
显然这个代码不会编译,除非像一个构造函数
constructor(stringRepresentation: String) { this.stringRepresentation = stringRepresentation }
被添加。
你在setter中有后台字段,所以我们应该初始化,看这个参考