Kotlin-从KProperty1 <T,P>获取Class <T>

时间:2019-09-26 10:54:08

标签: kotlin reflection

提供以下课程:

data class Foo(val bar: Int)

我如何为Class<T>获得一个Foo ...

val prop = Foo::bar

...来自此属性表达式?

1 个答案:

答案 0 :(得分:3)

val receiver = prop.parameters[0]
val receiverClass = receiver.type.jvmErasure.java

请注意,您在途中会收到KTypeKClass,而您可能更喜欢Class

以上方法之所以有效,是因为parameters文档says

  

如果此可调用对象需要this实例或扩展接收者参数,则它们将以该顺序排在列表的首位。

因此可能值得在您的代码中添加注释。

还可以通过以下方式更明确地获得接收器参数

val receiver = (prop.instanceParameter ?: prop.extensionReceiverParameter)!!