Android Kotlin Extension超级通话

我是一个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对象上调用RelamObject.store()则将调用RelamObject.store()扩展名,但是如果我在Player实例上调用RelamObject.store()将被调用的扩展名将是Player.store() 。 (现在没问题)我不想复制粘贴相同的代码,我喜欢写更少的重用。 所以我需要在内部的Player.store()将调用通用的RealmObject.store()

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

我所问的是(仅仅因为我个人直觉而写的):

这是好方法吗? 还是有更好的办法?

谢谢

你的方法似乎是完全正确的,因为它确实需要什么。 Kotlin基于接收器表达式的静态 (推断或声明)类型来解析扩展调用,而cast (this as RealmObject)使得静态表达式类型为RealmObject

另一个有效的方式来做到这一点,我不确定是更好的,是使用一个可调用的引用到另一个扩展:

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