如何使用ASM更改方法和方法的最终修饰符类

时间:2013-02-06 08:19:18

标签: java java-bytecode-asm

实际上我在课程中有一个方法如下。

public static final void print(String str){
       System.out.println(str);
}

我想从met hod中删除final修饰符。所以在这之后,我的方法将如下所示:

public static void print(String str){   
       System.out.println(str);
}

使用ASM,我们将在

中获取此信息
public MethodVisitor visitMethod(int access, String name, 
                                 String desc, String signature, 
                                 String[] exceptions) { }

在上面,我认为要实现上述情况,我们需要使用access参数。 但访问是公共+静态+最终的总和。 如何删除最终是我的问题?

同样适用于班级最终修饰符吗?

1 个答案:

答案 0 :(得分:6)

你只需要清除" final"有点像这样:

public MethodVisitor visitMethod(int access, String name, 
                             String desc, String signature, 
                             String[] exceptions) { 
    return super.visitMethod(
        access & (~Opcodes.ACC_FINAL), 
        name, desc, signature, exceptions);
}