在Kotlin中为getter设置返回值时使用匿名函数

时间:2019-05-24 14:46:32

标签: kotlin

在Kotlin中,当创建一个getter / setter对时,通常使用内联代码设置getter。但是我想知道是否可以用匿名函数替换内联代码:

var UserSettings: UserSettings?
    get() = getUserSettings() // Replace this with an anonymous function?
    set(value) {
        putPref(USER_SETTINGS, Json.stringify(UserSettings.serializer(), value!!))
    }

private fun getUserSettings(): UserSettings? {
    val info = getPref(KEY_USER_SETTINGS)
    return Json.parse(UserSettings.serializer(), info!!)
}

可以将getUserSettings()替换为匿名函数吗?在上面的代码中,我有一个单独的函数getUserSettings,我想将其放置在get()=

之后

3 个答案:

答案 0 :(得分:3)

是的,可以。只需看看getters and setters - backing properties,那里是(第一个也是唯一的示例),提到的是get() {而不是get() =。您的示例将如下所示:

var UserSettings: UserSettings?
  get() { 
    val info = getPref(KEY_USER_SETTINGS)
    return Json.parse(UserSettings.serializer(), info!!)
  }
  set(value) {
    putPref(USER_SETTINGS, Json.stringify(UserSettings.serializer(), value!!))
  }

答案 1 :(得分:1)

我不知道您要的是什么,但这可能会有所帮助

var v: Int? = null
    get() = run {
        return field
    }
    set(value) = run {
        field = value
    }

在这种情况下,吸气剂必须等于Int吗?和二传手都必须等于单位。因此在运行中我们返回该类型

答案 2 :(得分:0)

我认为@Roland的答案是正确的。

请注意,在匿名函数之前保持=会导致编译器返回您所描述的错误。

您能仔细检查一下您是否在写这样的东西吗?

var UserSettings: UserSettings?
  get() = { ... }

您正在写:

var UserSettings: UserSettings?
  get() { ... }