我想拥有RealmList类的扩展功能:
private inline fun RealmList<Any?>.saveAll() {
this.forEach {
item -> Realm.getDefaultInstance().insert(item!! as RealmModel)
}
}
但是每当我使用它时,都会出现此错误:
答案 0 :(得分:1)
要实现此目的,请将 out 添加到扩展功能的通用声明中。
如果在RealmList
private inline fun RealmList<out Any?>.saveAll() {
this.forEach {
item -> Realm.getDefaultInstance().insert(item!! as RealmModel)
}
}
答案 1 :(得分:0)
您的代码通常不安全。请修正您的代码,阅读文档,诸如此类。
此外,RealmList需要? extends RealmModel
,因此您需要将T: RealmModel
与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()
}
}
}
}
答案 2 :(得分:-1)
也许您应该使用Realms方法插入而不是执行循环?这样,您的扩展程序就可以轻松调用:
fun <T: RealmModel> RealmList<out T?>.saveAll() = Realm.getDefaultInstance().insert(this)