Reflection Kotlin超类
我对函数有定义Reflection Kotlin超类,reflection,kotlin,Reflection,Kotlin,我对函数有定义 abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable 抽象类AbstractDao(私有val数据存储:KotlinettyDatastore):Dao,其中T:Persistable 我需要从类型T中获取KClass。在Kotlin中,这是可能的?由于以下原
abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable
抽象类AbstractDao(私有val数据存储:KotlinettyDatastore):Dao,其中T:Persistable
我需要从类型
T
中获取KClass
。在Kotlin中,这是可能的?由于以下原因,此操作无法完成。但是您可以提供一个具有具体化类型的工厂方法,该方法将委托给接受KClass
的构造函数。下面是一个简化的示例:
class WithReifiedType<T> constructor(val kc: KClass<*>) {
companion object {
inline fun <reified T> getInstance(): WithReifiedType<T> {
println("Here's your KClass: ${T::class}")
return WithReifiedType(T::class)
}
}
}
//called like this
WithReifiedType.getInstance<String>()
使用ReifiedType构造函数(val kc:KClass)初始化{
伴星{
内联fun getInstance():WithReifiedType{
println(“这是您的KClass:${T::class}”)
返回REIFIEDTYPE(T::class)
}
}
}
//这样叫
WithReifiedType.getInstance()
在调用方站点上创建一个看起来像构造函数的顶级函数(作为伴随嵌入式工厂的替代品)也是可以接受的
inline fun <reified T> WithReifiedType(): WithReifiedType<T> {
println("Here's your KClass: ${T::class}")
return WithReifiedType(T::class)
}
//called like this
WithReifiedType<String>()
inline fun with reifiedtype():with reifiedtype{
println(“这是您的KClass:${T::class}”)
返回REIFIEDTYPE(T::class)
}
//这样叫
WithReifiedType()
您是指数据存储:KotlinEntityDataStore
?我不明白为什么Persistable
有一个泛型类型参数,那么显式Persistable
argumentKotlinEntityDataStore是构造函数的唯一参数。我需要从T参数获取Kclass:)否,由于JVM类型的擦除,除非您能够引用T
的非空实例,否则不可能仅从类签名执行。围绕这一点的一个选项是将构造函数设为私有,并使用一个具体化的T
参数放置一个内联函数(在伴生对象中),该参数返回AbstractDao
的实例。这有意义吗?