我可以从Reified T创建KType

时间:2017-03-14 19:56:51

标签: generics kotlin

我使用reified generics来捕获KClass<>

inline fun <reified T> register(generator: Generator<T>) {
    register(T::class, generator)
}

但是KType还有一些额外的属性,这些属性对我来说很有趣,比如可空性。我想写这样的东西来代替KType

inline fun <reified T> register(generator: Generator<T>) {
    register(T::ktype, generator) // Doesn't compile
}

...

register<String?>(myGen) // The nullability of String? is captured

是否有某种方法可以捕获KType而不是KClass<>

提前致谢。

1 个答案:

答案 0 :(得分:3)

不,就目前而言,无法做到这一点,Kotlin问题跟踪器中有an issue关于它,目前标记为待讨论

但是,您可以使用子类化,尤其是technique called super type tokens,从reified类型参数中获得更多KClass<T>