初始化具有getter和setter的字段?

时间:2017-08-14 15:05:39

标签: android class kotlin getter-setter

我创建了一个在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" } 属性返回值,不是吗?

2 个答案:

答案 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
}

已添加。