我很想知道添加到每个 Kotlin 类的 MetaData 注释中包含哪些数据。
但大多数字段没有提供更多细节
“自定义格式的元数据。不同种类的格式可能不同(甚至不存在)。”
https://github.com/JetBrains/kotlin/blob/master/libraries/stdlib/jvm/runtime/kotlin/Metadata.kt
是否有引用资料解释如何解释这些数据?
最佳答案
kotlin.Metadata
包含有关 Kotlin 符号的信息,例如它们的名称、签名、类型之间的关系等。其中一些信息已经存在于类文件中的 JVM 签名中,但是很多都不是,因为有很多 Kotlin 特定的东西 JVM 类文件无法正确表示:类型可空性、可变/只读集合接口(interface)、声明站点差异等。
没有采取任何具体措施来公开此注释中编码的数据架构,因为对于大多数用户来说,需要此类数据来在运行时自省(introspection)程序,而 Kotlin reflection library为此提供了一个不错的 API。
如果您需要检查未通过反射 API 公开的特定于 Kotlin 的内容,或者您只是好奇该注释中还存储了哪些内容,您可以查看 kotlinx.reflect.lite 的实现.它是一个轻量级库,其核心是 protobuf 生成的模式解析器。目前那里支持的不多,但是有schemas可用的 您可以使用它来读取您需要的任何其他数据。
UPD(2018 年 8 月):自从回答了这个问题后,我们发布了一个新的(实验性和不稳定的)库,旨在成为读取和修改元数据的预期方式:https://discuss.kotlinlang.org/t/announcing-kotlinx-metadata-jvm-library-for-reading-modifying-metadata-of-kotlin-jvm-class-files/7980
关于kotlin - kotlin.MetaData 中保存的数据格式是否记录在任何地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816521/