代码之家  ›  专栏  ›  技术社区  ›  Amiraslan

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

  •  1
  • Amiraslan  · 技术社区  · 7 年前

    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"
            }
    

    2 回复  |  直到 7 年前
        1
  •  3
  •   Muthukrishnan Rajendran    7 年前

    你有后备场 field 在setter中,我们应该初始化,看到了吗 reference

        2
  •  2
  •   aristotll    7 年前

    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
    }
    

    已添加。