Java 如何使用ASM更改方法的最终修改器&;班

Java 如何使用ASM更改方法的最终修改器&;班,java,java-bytecode-asm,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 MethodVisit

实际上,我在一个类中有一个方法,如下所示

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参数。 但访问是公共+静态+最终的总和。 如何删除唯一的最终是我的问题


类级最终修饰符也是如此?

您只需清除“最终”位,如下所示:

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