gpt4 book ai didi

kotlin - Android Kotlin 扩展 super 调用

转载 作者:行者123 更新时间:2023-12-01 23:26:15 26 4
gpt4 key购买 nike

我是一名 Java Android 开发者,我正在接近 Kotlin

我定义了以下类:

open class Player : RealmObject() {
...
}

我定义了以下两个扩展,一个用于通用 RealmObject 类,另一个用于特定 Player 类:

fun RealmObject.store() {
Realm.getDefaultInstance().use { realm ->
realm.beginTransaction()
realm.copyToRealmOrUpdate(this)
realm.commitTransaction()
}
}

fun Player.store(){
this.loggedAt = Date()
(this as RealmObject).store()
}

我想要的是,如果我在任何 RealmObject 对象上调用 .store() ,将调用 RelamObject.store() 扩展但是,如果我在 Player 实例上调用 .store() ,则将调用的扩展将是 Player.store()。(暂时没问题)我不想复制粘贴相同的代码,我喜欢少写多重用。所以我需要在内部 Player.store() 将调用通用 RealmObject.store()

我明白了。我在那里写的代码实际上按预期工作:D

我要问的是(只是因为我只是凭个人直觉写的):

这是好方法吗?!或者有更好的办法吗?

谢谢

最佳答案

您的方法似乎完全正确,因为它完全满足了需要。 Kotlin 根据 static 解析扩展调用接收者表达式的(推断或声明)类型,并且强制转换 (this as RealmObject) 使静态表达式类型为 RealmObject

执行此操作的另一种有效方法(我不确定哪种方法更好)是使用对其他扩展的可调用引用:

fun Player.store(){
this.loggedAt = Date()
(RealmObject::store)(this)
}

关于kotlin - Android Kotlin 扩展 super 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com