在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()=
之后答案 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() { ... }