kotlin.MetaData中保存的数据格式是否记录在何处?

hen*_*nry 12 kotlin

我很想知道添加到每个Kotlin类的MetaData注释中包含哪些数据.

但大多数领域都没有提供更多细节

"自定义格式的元数据.不同类型的格式可能不同(甚至不存在)."

https://github.com/JetBrains/kotlin/blob/master/core/runtime.jvm/src/kotlin/Metadata.kt

是否有参考解释如何解释这些数据?

Ale*_*lov 14

kotlin.Metadata 包含有关Kotlin符号的信息,例如它们的名称,签名,类型之间的关系等.其中一些信息已经存在于类文件的JVM签名中,但很多都没有,因为有很多Kotlin特定的东西哪些JVM类文件无法正确表示:类型为可空性,可变/只读集合接口,声明站点差异等.

没有采取任何具体行动来使这个注释中编码的数据的模式公开,因为对于大多数用户来说,需要这样的数据来在运行时内省程序,并且Kotlin反射库为此提供了一个很好的API.

如果你需要检查没有通过反射API暴露的Kotlin特定的东西,或者你只是好奇了那个注释中还存储了什么,你可以看看kotlinx.reflect.lite的实现.它是一个轻量级的库,其核心是protobuf生成的模式解析器.目前没有太多支持,但有一些模式可用于读取您需要的任何其他数据.

UPD(2018年8月):由于这个问题得到解答,我们发布了一个新的(实验性和不稳定的)库,旨在成为阅读和修改元数据的预期方式:https://discuss.kotlinlang.org/t /宣布-kotlinx元数据-JVM库换读改性-元数据的-科特林-JVM-类文件/ 7980