1

我想从 RealmList 类中获得一个扩展功能:

private inline fun RealmList<Any?>.saveAll() {
    this.forEach {
        item -> Realm.getDefaultInstance().insert(item!! as RealmModel)
    }
}

但是每当我使用它时,就会出现这个错误:

在此处输入图像描述

4

3 回答 3

3

要实现这一点,请添加扩展函数的通用声明中。如果这样的声明在RealmList

private inline fun RealmList<out Any?>.saveAll() {
    this.forEach {
        item -> Realm.getDefaultInstance().insert(item!! as RealmModel)
    }
}
于 2018-06-21T09:59:34.300 回答
2

您的代码通常是不安全的。请修复您的代码,阅读文档,诸如此类。

此外, RealmList 需要? extends RealmModel,因此您需要使用T: RealmModelwith out

fun <T: RealmModel> RealmList<out T?>.saveAll() {
    Realm.getDefaultInstance().use { realm ->
        val wasInTransaction = realm.isInTransaction()
        try {
            if(!wasInTransaction) {
                realm.beginTransaction()
            }
            this.forEach {
                item -> item?.let { realm.insert(it) }
            }
            if(!wasInTransaction) {
                realm.commitTransaction()
            }
        } catch(e: Throwable) {
            if(realm.isInTransaction()) {
                realm.cancelTransaction()
            }
        }
    }
}
于 2018-06-21T12:59:51.927 回答
-1

也许您应该使用 Realms 方法插入而不是执行循环?这样你的扩展就变成了一个简单的调用:

fun <T: RealmModel> RealmList<out T?>.saveAll() = Realm.getDefaultInstance().insert(this)
于 2018-06-21T10:14:24.617 回答