Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在抽象Dao类中实现findFirst()函数_Kotlin_Realm_Dao - Fatal编程技术网

Kotlin 在抽象Dao类中实现findFirst()函数

Kotlin 在抽象Dao类中实现findFirst()函数,kotlin,realm,dao,Kotlin,Realm,Dao,几天后我就开始接Kotlin了。 Atm我正试图编写一个带有公共函数(copyOrUpdate,delete,…)的抽象Dao类,但我仍然停留在findFirst和findAll上。 我的数据库是Realm 这是我的一把刀: abstract class Dao<T : RealmModel>() { //Get Realm Instance val db: Realm by lazy { Realm.getDefaultInstance()

几天后我就开始接Kotlin了。 Atm我正试图编写一个带有公共函数(copyOrUpdate,delete,…)的抽象Dao类,但我仍然停留在findFirst和findAll上。 我的数据库是Realm

这是我的一把刀:

    abstract class Dao<T : RealmModel>() {

    //Get Realm Instance
    val db: Realm by lazy {
        Realm.getDefaultInstance()
    }

    //Delete - 1 Object
    fun delete(input: T) {

        if (db.isInTransaction) {
            input.deleteFromRealm()
        } else {
            db.executeTransaction { realm -> input.deleteFromRealm() }
        }
    }
}
有什么办法解决这个问题吗? 目前,这个函数在我的UserDao类中

class UserDao() : Dao<User>() {    
   //where
    private fun where(): RealmQuery<User> {
        return db.where<User>()
    }

    // Find First
    fun findFirst(): User? {
        return where()
            .findFirst()
    }
}
class UserDao():Dao(){
//在哪里
私人娱乐场所():RealmQuery{
返回db.where()
}
//先找到
fun findFirst():用户{
返回where()
.findFirst()
}
}
传递到构造函数中:

abstract class Dao<T : RealmModel>(private val cls: Class<T>) {    
    fun findFirst(): T? {
        return db.where(cls).findFirst()
    }
}

class UserDao() : Dao<User>(User::class.java) { ... }
抽象类Dao(private-val-cls:class){
有趣的findFirst():T{
返回db.where(cls.findFirst())
}
}
类UserDao():Dao(User::class.java){…}

Kotlin允许您在某些情况下避免或隐藏它,但不能使用抽象类。

我会选择扩展+内联乐趣

inline fun <reified T : RealmModel> Realm.findFirst(): T? {
    return where(T::class.java).findFirst()
}
inline fun Realm.findFirst():T?{
返回where(T::class.java).findFirst()
}
inline fun <reified T : RealmModel> Realm.findFirst(): T? {
    return where(T::class.java).findFirst()
}