【问题标题】:Kotlin: nullable property delegate observableKotlin:可空属性委托可观察
【发布时间】:2023-04-02 12:57:01
【问题描述】:

在 Kotlin 中,我们可以为非空属性定义一个 observable,

var name: String by Delegates.observable("<no name>") {
    prop, old, new ->
    println("$old -> $new")
}

这是不可能的

var name: String? by Delegates.observable("<no name>") {
    prop, old, new ->
    println("$old -> $new")
}

为可空属性定义可观察对象的方法是什么?

编辑:这是编译错误

Property delegate must have a 'setValue(DataEntryRepositoryImpl, KProperty<*>, String?)' method. None of the following functions is suitable: 
public abstract operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String): Unit defined in kotlin.properties.ReadWriteProperty

【问题讨论】:

  • 为什么你认为不可能?它应该工作相同。请说明您在使用第二个代码 sn-p 时遇到了什么问题。
  • 无法编译,更新时出现编译器错误。

标签: android kotlin


【解决方案1】:

由于某种原因,类型推断在这里失败。您必须手动指定委托的类型。相反,您可以省略属性类型声明:

var name by Delegates.observable<String?>("<no name>") {
    prop, old, new ->
    println("$old -> $new")
}

请在https://youtrack.jetbrains.com/issues/KT 提出问题

【讨论】:

  • 原来已经存在一个:youtrack.jetbrains.com/issue/KT-10930
  • 我认为“旧”、“新”也有问题。 “旧”以某种方式变成“新”,所以它是 println("$new -> $new") 在某个点之后
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2022-01-02
  • 2022-01-23
  • 2010-11-17
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多