2

実際には、以下のようにクラスに 1 つのメソッドがあります。

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

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) { }

上記の場合、上記のケースを実現するには、アクセス引数をいじる必要があると思います。ただし、アクセスは public + static + final の合計です。最終的なものだけを削除する方法は私の問題ですか?

クラスレベルの最終修飾子も同じですか?

4

1 に答える 1

7

次のように「最終」ビットをクリアするだけです。

public MethodVisitor visitMethod(int access, String name, 
                             String desc, String signature, 
                             String[] exceptions) { 
    return super.visitMethod(
        access & (~Opcodes.ACC_FINAL), 
        name, desc, signature, exceptions);
}
于 2013-02-06T08:47:44.783 に答える