Kotlin扩展功能:未解决的参考

Vic*_*cia 1 android realm kotlin

我正在尝试创建此扩展功能:

fun <T : RealmObject> Realm.query(myClass : KClass<T>) {    
    RealmQuery.createQuery(this, myClass::class.java)
}
Run Code Online (Sandbox Code Playgroud)

这不编译.编译器说:"我写的时候"未解析的引用:myClass"

myClass::class.java
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

fun <T : RealmObject> Realm.query(myClass : Class<T>) {
     RealmQuery.createQuery(this, myClass)
}
Run Code Online (Sandbox Code Playgroud)

它完美无缺!我不明白为什么.

mie*_*sol 5

myClass已经KClass<T>可以使用myClass.java成员函数了:

fun <T : RealmObject> Realm.query(myClass : KClass<T>) =    
    RealmQuery.createQuery(this, myClass.java)
Run Code Online (Sandbox Code Playgroud)

为了简化使用你其实可以利用inline像这样

inline fun <reified T : RealmObject> Realm.query() =    
    RealmQuery.createQuery(this, T::class.java)
Run Code Online (Sandbox Code Playgroud)

然后用它作为 val userQuery = Realm.query<User>()