Kotlin superClass Kclass

时间:2017-12-30 15:16:20

标签: reflection kotlin

我确定了这个功能

URLExecute[
 "http://maps.googleapis.com/maps/api/staticmap",
 {"center" -> "Brooklyn Bridge,New York,NY",
  "zoom" -> "13", "size" -> "600x300"}, "Method" -> "GET"]

我需要从abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable 类型中获取KClass。在科特林有可能吗?

1 个答案:

答案 0 :(得分:1)

由于type erasure,无法完成此操作。但是,您可以提供一个reified type的工厂方法,该方法委托给接受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>()