使用 ASM 树 API 获取字段的修饰符

Posted

技术标签:

【中文标题】使用 ASM 树 API 获取字段的修饰符【英文标题】:Get the modifiers of a field using the ASM tree API 【发布时间】:2012-03-02 14:37:59 【问题描述】:

我正在使用 ASM 为 Java 类文件编写分析器。我要确定的一件事是类中字段的修饰符(public、static、final?)是什么。但我不知道该怎么做。

在文档中,我找到了修饰符的操作码,这似乎与 FieldNode 类的访问值相关。但是我不明白我是如何从这个值中导出字段的修饰符的。

有什么建议吗?

【问题讨论】:

【参考方案1】:

访问成员变量是一个位域,每个位位置对应一个特定的访问修饰符。要检查一下,您必须使用二进制 AND 与来自 Opcodes 的常量并检查结果是否不为零。例如:

boolean isPublic = (node.access & Opcodes.ACC_PUBLIC) != 0;
boolean isStatic = (node.access & Opcodes.ACC_STATIC) != 0;

【讨论】:

以上是关于使用 ASM 树 API 获取字段的修饰符的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Java 反射 API 允许我们访问私有和受保护的字段和方法?这不会破坏访问修饰符的目的吗? [复制]

C#中类。方法。字段 的默认访问修饰符分别是啥?

什么是修饰符?它有什么作用?举例说明

为啥在更改的字段上使用只读修饰符?

面向对象修饰符

static修饰符