【问题标题】:How to use get() with backing fields in kotlin如何在 kotlin 中将 get() 与支持字段一起使用
【发布时间】:2019-12-21 08:19:06
【问题描述】:

在下面的代码中,我试图创建一个 getter 方法作为支持字段。 因此,当调用 getLastNameLen 属性时,它应该返回 lastNameset 的长度。

请参考下面的代码,帮助我修复错误。

如何显示支持字段的输出

代码

class Thomas (val nickname: String?, val age : Int?) {

    //backing field 1
    var lastName : String? = null
        set(value) {
            if (value?.length == 0) throw IllegalArgumentException("negative values are not allowed")
            field = value
            println("lastname backing field set: ${field} ")
        }

    val getLastNameLen
        get() = {
            this.lastName?.length
        }
}

输出

lastname backing field set: jr.stephan 
lastName is jr.stephan
lastNameLen is () -> kotlin.Int?

【问题讨论】:

  • 按照惯例,您不应该在 Kotlin 中包含“get”。只需命名您的字段:lastNameLen

标签: kotlin backing-field


【解决方案1】:

这是因为您使用 = 运算符将 getter 设置为 lambda。

你有两个选择:

val getLastNameLen
    get() {
        return this.lastName?.length
    }

val getLastNameLen
    get() = this.lastName?.length

基本上在get() 之后使用方括号来创建一个getter 函数,或者如果你可以在一行中使用 = 就在get() 之后但不要包括{} 否则它会处理它就像它的 lambda

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2017-08-30
    • 2018-07-13
    • 2017-06-03
    相关资源
    最近更新 更多