Gia*_*esi 5 super kotlin kotlin-extension kotlin-android-extensions
我是Java Android开发人员,我正在接近Kotlin
我已经定义了以下类:
open class Player : RealmObject() {
...
}
Run Code Online (Sandbox Code Playgroud)
我定义了以下两个扩展,一个用于通用的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()
}
Run Code Online (Sandbox Code Playgroud)
我想要的是如果我调用.store()任何RealmObject对象,RelamObject.store()扩展名将被调用但是如果我.store()在一个Player实例上调用将被调用的扩展名Player.store().(现在没问题)我不想复制粘贴相同的代码,我喜欢写更少的重用更多.所以我需要在内部Player.store()调用泛型RealmObject.store()
我知道了.我在那里写的代码实际上按预期工作:D
我要问的是(仅仅因为我是通过个人直觉写的):
这是好方法吗?!还是有更好的方法?
谢谢
您的方法似乎完全正确,因为它完全满足了需要。Kotlin 根据接收者表达式的静态(推断或声明)类型解析扩展调用,并且强制转换(this as RealmObject)使静态表达式类型为RealmObject。
执行此操作的另一种有效方法(我不确定哪种方法更好)是使用对其他扩展的可调用引用:
fun Player.store(){
this.loggedAt = Date()
(RealmObject::store)(this)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
333 次 |
| 最近记录: |