gpt4 book ai didi

java - 在类文件中查找对其他类的引用的简单方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:54:37 27 4
gpt4 key购买 nike

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html 中描述的类文件格式包含对 constant pool 中其他类的所有引用作为 CONSTANT_Utf8 类型的条目。

但这些条目不仅是对类的引用,还包括类文字、方法名称、字段等等。

在第一次尝试中,我认为使用由类型为 CONSTANT_Class、CONSTANT_NameAndType 和 CONSTANT_MethodType 的其他 constant_pool 条目引用的常量池条目就足够了

但这些似乎不包括类型参数和注释。进一步阅读规范似乎表明我需要解析类似 RuntimeVisibleAnnotations 的内容和类似的构造,以便识别相关的常量池条目。这意味着我必须或多或少地解析完整的类文件。

但是我自己解析类文件背后的整个想法是,它会比使用像 ASM 这样的库更简单,因为我认为解释常量池就足够了。

我的问题是:有没有一种方法可以通过仅解释常量池来可靠地识别类文件中引用的所有类?

最佳答案

类加载器无法加载的注解类型会被此类加载器忽略,并且在运行时看起来像是不可见的。我假设这就是注释引用的类型存储在常量池中的原因,在常量池中,未知类型的解析会阻止成功的类加载。注释是代码属性,即元数据,不应通过避免常量池条目将它们深入链接到类中。

因此,您还需要反省常量池之外的 RuntimeVisibleAnnotations。但是,如果常量池不包含字符串 RunntimeVisibleAnnotations,则您的方法有效。然而,ASM 的开销非常小,所以我还是会使用它。

关于java - 在类文件中查找对其他类的引用的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27542326/

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