我尝试使用访问者API使用ASM 6实现某些类转换。 我需要知道某个字段是否具有某个访问标志。例如,字段可以是ACC_PUBLIC + ACC_STATIC。 在visitField方法中,访问标志是9.所以我怎么知道该字段是否是静态的?
由于
答案 0 :(得分:1)
除了可以使用java.lang.reflect.Modifier
中定义的实用程序方法(如isStatic(access)
)之外,您还可以使用按位和运算符({{1)来测试位的存在性}}):
&
如果要提取和解码所有位,可以使用@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
// for a single flag bit, test against zero is sufficient
boolean isStatic = (access & Opcodes.ACC_STATIC) != 0;
// otherwise, compare with the combination itself
final int PUBLICSTATIC = Opcodes.ACC_STATIC|Opcodes.ACC_PUBLIC;
boolean isPublicAndStatic = (access & PUBLICSTATIC) == PUBLICSTATIC;
// likewise, you can test for the absence of bits:
final int ACCESS_LEVEL = Opcodes.ACC_PUBLIC|Opcodes.ACC_PROTECTED|Opcodes.ACC_PRIVATE;
boolean isPackagePrivate = (access & ACCESS_LEVEL) == 0;
// this allows testing for things not provided by java.lang.reflect.Modifier
boolean isVarArgs = (access & Opcodes.ACC_VARARGS) != 0;
…
}
中的实用程序方法,例如:
java.lang.Integer
答案 1 :(得分:0)
我在类java.lang.reflect.Modifier中找到了答案,它有静态方法来查询访问修饰符,例如isStatic(access)。