当前位置: 首页 > 知识库问答 >
问题:

更多Kotlin代表的乐趣

周滨海
2023-03-14
class KotlinLiveData<T>(val default: T) {
    val data = MutableLiveData<T>()

    operator fun getValue(thisRef: Any?, property: KProperty<*>):T {
        return data.value ?: default
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value:T) {
        if (Looper.myLooper() == Looper.getMainLooper()) {
            data.value = value
        } else {
            data.postValue(value)
        }
    }
}
var name : String by KotlinLiveData("not given")
name = "Chrzęszczybrzęczykiewicz"
name.data.observe(this, nameObserver) // won't work :(

你知道我能不能得到它吗?

共有1个答案

万俟均
2023-03-14

您可以访问属性的委托对象,并从中获取MutableLiveData :

inline fun <reified R> KProperty<*>.delegateAs<R>(): R? {
    isAccessible = true
    return getDelegate() as? R
}

那么用法是:

::name.delegateAs<KotlinLiveData<String>>?.data?.observe(this, nameObserver)

若要引用成员属性,请使用this::namesomeInstance::name.

 类似资料:
  • 本文向大家介绍Python Learning 列表的更多操作及示例代码,包括了Python Learning 列表的更多操作及示例代码的使用技巧和注意事项,需要的朋友参考一下 遍历列表-for循环 列表中存储的元素可能非常多,如果想一个一个的访问列表中的元素,可能是一件十分头疼的事。那有没有什么好的办法呢?当然有!使用 for循环 假如有一个食物名单列表,通过 for循环 将列表中的食物名称都打印

  • 我是新手。我想在Person类驱动的Employee类中添加age参数。我怎么能在科特林做到?! 我的错误是这样的: 为什么不能在员工构造函数中使用var或val?!我犯了什么错误?

  • 我知道我可以在我的表单上创建一个绑定,以便能够访问和更新下表中的记录: 但这是通过从路由传递一个id来完成的 所以只有当我只需要向用户显示和更新一条记录/行时,这才有用。基本上就像一个博客条目,有一个标题,正文为一行。我只是想用户去的路线 /nav/edit/和它显示所有行的导航作为一个可编辑的输入发送回数据库。 我的问题是,如何从表中检索多行,并将它们的值显示到输入字段中,当用户编辑其字段时,这

  • 我试图将库从Kotlin转换为Java,但这个方法限制了我: 如何在Java中实现

  • 自JDK 8以来已被弃用,并将在JDK 10中/已被删除,根据JEP 313和弃用文本,应使用带有标志的代替: 警告:工具计划在下一个主要JDK版本中删除。该工具已被JDK 8中添加到的'-h'选项所取代。建议用户迁移到使用'-h'选项;有关更多信息,请参阅javac手册页。 问题是,对编译后的文件,而操作源文件(即files) 与 Kotlin 和函数配合得很好,因为所有内容最终都被编译为 Ja

  • Apps https://github.com/sivasamyk/logtrail[LogTrail] - View, analyze, search and tail log events in realtime with a developer/sysadmin friendly interface https://github.com/wtakase/kibana-own-home[Own