gpt4 book ai didi

reflection - Kotlin 编译器是否总是在字节码中保留参数名称?

转载 作者:行者123 更新时间:2023-12-04 22:44:00 25 4
gpt4 key购买 nike

kotlin-reflect , 类(class) KParameter可以为空 name ,其 KDoc 说:

Name of this parameter as it was declared in the source code, or null if the parameter has no name or its name is not available at runtime. Examples of nameless parameters include this instance for member functions, extension receiver for extension functions or properties, parameters of Java methods compiled without the debug information, and others.



它说明了一个众所周知的事实,即 Java 并不总是在字节码中包含参数名称,但它没有说明 Kotlin 类,尽管还有一些其他类。

我可以假设 Kotlin 编译器保留为 Kotlin 源代码中的函数声明的参数名称吗? (特别是,我需要构造函数参数名称)。

最佳答案

除非以某种方式修改了字节码,否则可以安全地假设在源中给定名称的所有参数在运行时都具有这些名称。 Kotlin 1.0 确实如此,并且没有计划改变这一点。

如果您对其他参数包含哪些未命名参数感兴趣,还有默认属性 setter 的单个参数和内部类构造函数的外部类参数。这些参数在源代码和运行时都没有名称。

UPD:因为这对某些人来说可能看起来很困惑,所以这个问题和答案只与保留 Kotlin 反射的参数名称有关,特别是这样 KParameter.name会工作。这与 Java 反射会为已编译的 Kotlin 代码看到的参数名称无关。要保留 Java 反射的参数名称,请传递 -java-parameters Kotlin 编译器的选项。

关于reflection - Kotlin 编译器是否总是在字节码中保留参数名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36093019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com