如何在Kotlin中使用反射获取参数名称?

5

Java8有"-parameters"参数传递给编译器,那么Kotlin呢?从我所看到的,Kotlin编译器会在参数中添加@JetValueParameter注释与参数名称匹配,但其中一个已被弃用。

1个回答

11

更新:现在反射 API 支持获取参数名称:使用 KCallable.parameters 将给出参数列表,KParameter.name 将给出参数名。

目前的解决方案是使用 JetValueParameter 注解,尽管它已经被弃用。

我们正在努力支持 Kotlin 反射中的参数名称,这将很快可用。到那时,JetValueParameter 将被弃用,并改用新的 API。

值得注意的是,Kotlin 编译器当前只生成与 Java 1.6 兼容的 JVM 字节码,而与 javac 的 -parameters 对应的 MethodParameters 属性出现在 Java 1.8 字节码中。因此,您仍然无法通过 Java 反射 获得 Kotlin 方法的参数名称。我们考虑支持字节码目标 1.8,所以未来可能会起作用。


亚历山大,现在还是这样吗?或者有什么更新吗(例如Java能否看到Kotlin参数名称的机会)? - Yurii Rashkovskii
@YuriiRashkovskii 目前我们正在添加对目标字节码版本1.8的支持,但是编写“MethodParameters”属性尚未计划。如果这对您有用,请在我们的跟踪器中创建一个问题! - Alexander Udalov
@AlexanderUdalov,这个问题有什么更新吗?有没有相关文档的链接? - redeemefy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接