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()