Kotlin superClass Kclass

我有这个function的定义

abstract class AbstractDao(private val dataStore: KotlinEntityDataStore): Dao where T: Persistable 

我需要从T型获得KClass 。 Kotlin有可能吗?

由于types擦除,这不能完成。 但是你可以提供一个具有reified type的工厂方法,委托给一个接受KClass的构造KClass 。 这是一个简单的例子:

 class WithReifiedType constructor(val kc: KClass<*>) { companion object { inline fun  getInstance(): WithReifiedType { println("Here's your KClass: ${T::class}") return WithReifiedType(T::class) } } } //called like this WithReifiedType.getInstance() 

在调用者网站上创建一个顶层函数(作为伴随嵌入式工厂的替代品)看起来像构造函数也是可以接受的。

 inline fun  WithReifiedType(): WithReifiedType { println("Here's your KClass: ${T::class}") return WithReifiedType(T::class) } //called like this WithReifiedType()