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
的实例。这有意义吗?