3

したがって、Realm で挿入操作を実行し、RealChangeListener で挿入が完了したことを通知するインタラクターがあります。それは次のようなものです:

fun insertCar(item: Car) {
        realm.doInTransaction {
            val car = Car(...)
            val copy = copyToRealm(car)
            copy.addChangeListener(...)
        }
    }

私はこのようにすることができます:

fun insertCar(item: Car, listener: RealmChangeListener<Car>) {
            realm.doInTransaction {
                val car = Car(...)
                val copy = copyToRealm(car)
                copy.addChangeListener(listener)
            }
        }

そして、次のようにアクセスします。

realmInteractor.insertCar(item, RealmChangeListener {
   // do something here
})

しかし、私はこのリスナーを削除する方法がありません

realmInteractor.insertCar(item, RealmChangeListener {
   // do something here
   it.removeChangeListener(this)
})

this実際のリスナーではなく、その場所にあるクラスを指します

私もこれを行うことができます:

fun insertCar(item: Car, doAfterChange (Car) -> Unit) {
                realm.doInTransaction {
                    val car = Car(...)
                    val copy = copyToRealm(car)
                    copy.addChangeListener(RealmChangeListener{
                    doAfterChange()
                    })
                }
            }

しかし、私は別のSAMの中にSAMを持っています(あまりにもやり過ぎです)

私はこのようにすることができます:

fun insertCar(item: Car, listener: RealmChangeListener<Car>) {
                realm.doInTransaction {
                    val car = Car(...)
                    val copy = copyToRealm(car)
                    copy.addChangeListener(listener)
                }
            }

realmInteractor.insertCar(item, object : RealmChangeListener<Car> {
                        override fun onChange(element: Car?) {
                            ...
                            element?.removeChangeListener(this)
                        }
                    })

これは機能しますが、冗長すぎます。

では、これにどのように対処し、何が最善のアプローチと考えられているのでしょうか?

4

1 に答える 1