Generic 的 Kotlin 扩展功能不适用于 Any?

Kotlin extension function with Generic doesn't work with Any?

我想要 RealmList 的扩展函数 class:

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

但是每次我用的时候,都会出现这个错误:

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

中声明这样的声明,它将起作用
private inline fun RealmList<out Any?>.saveAll() {
    this.forEach {
        item -> Realm.getDefaultInstance().insert(item!! as RealmModel)
    }
}

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

fun <T: RealmModel> RealmList<out T?>.saveAll() = Realm.getDefaultInstance().insert(this)

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

此外,RealmList 需要 ? extends RealmModel,因此您需要将 T: RealmModelout 一起使用。

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