我创建了一个在Kotlin中有一个示例字段的类
ostream
当我创建类的对象并调用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"
它始终会从 var smth: String // Why this gives error?
get() = "Here it is"
set(value) {
field = "it is $value"
}
属性返回值,不是吗?
答案 0 :(得分:3)
您在setter中有支持字段field
,因此我们应初始化,请参阅此reference
答案 1 :(得分:2)
我认为这是因为编译器不够聪明,无法推断它不是空的。
实际上,这里的官方文档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
}
已添加。