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() } 

То, что я хочу, – это если я вызываю .store() для любого объекта RelamObject.store() расширение RelamObject.store() будет .store() НО, если я вызову .store() в экземпляре Player расширение, которое будет вызываться, будет Player.store() . (Нет проблем на данный момент) Я не хочу копировать вставку того же кода, я люблю писать меньше повторного использования. Поэтому мне нужно, чтобы внутренне Player.store() вызывал общий RealmObject.store()

Я понял. Код, который я написал, фактически работает так, как ожидалось: D

То, о чем я спрашиваю (просто потому, что я написал это только по личному интуиции):

Это хороший способ ?! Или есть лучший способ?

спасибо

Ваш подход кажется совершенно правильным, потому что он делает именно то, что необходимо. Kotlin разрешает вызовы расширения на основе статического (предполагаемого или объявленного) типа выражения получателя, а литье (this as RealmObject) создает тип статического выражения RealmObject .

Еще один правильный способ сделать это, что я не уверен, лучше использовать ссылочную ссылку на другое расширение:

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