我有功能的定义
abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable
我需要得到
KClass
来自类型 T
.在 Kotlin 有可能吗?
最佳答案
由于 type erasure,这无法完成.但是您可以提供带有 reified type
的工厂方法委托(delegate)给接受 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>()
在调用者站点上创建一个看起来像构造函数的顶级函数(作为同伴嵌入式工厂的替代方案)也是可以接受的。
inline fun <reified T> WithReifiedType(): WithReifiedType<T> {
println("Here's your KClass: ${T::class}")
return WithReifiedType(T::class)
}
//called like this
WithReifiedType<String>()
关于reflection - Kotlin 父类(super class) Kclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48035181/