提供以下课程:
data class Foo(val bar: Int)
我如何为Class<T>
获得一个Foo
...
val prop = Foo::bar
...来自此属性表达式?
答案 0 :(得分:3)
val receiver = prop.parameters[0]
val receiverClass = receiver.type.jvmErasure.java
请注意,您在途中会收到KType
和KClass
,而您可能更喜欢Class
。
以上方法之所以有效,是因为parameters
文档says
如果此可调用对象需要this实例或扩展接收者参数,则它们将以该顺序排在列表的首位。
因此可能值得在您的代码中添加注释。
还可以通过以下方式更明确地获得接收器参数
val receiver = (prop.instanceParameter ?: prop.extensionReceiverParameter)!!