如何在 Java ASM 字节码中将整数添加到常量?

How to add an integer to a constant in Java ASM bytecode?

我正在尝试使用 java ASM 将 integer 变量 x 添加到名为 count 的静态 int 变量。

经过大量搜索,我找到了一种将固定整数添加到静态 int 变量的方法

                InsnList numCounting = new InsnList();

                // insert count++
                numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
                numCounting.add(new InsnNode(Opcodes.ICONST_1));
                numCounting.add(new InsnNode(Opcodes.IADD));
                numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));    
                mn.instructions.insert(node, numCounting);

我如何概括这一点,以便我可以将任意 int 添加到 count? 谢谢

我现在无法真正测试这段代码,但这应该可以工作

            InsnList numCounting = new InsnList();

            // insert count++
            numCounting.add(new FieldInsnNode(Opcodes.GETSTATIC, classNode_c.name, "count", "I"));
            numCounting.add(new LdcInsnNode( x )); // Load a constant onto the stack, asm will put that constant in the constant pool for you
            numCounting.add(new InsnNode(Opcodes.IADD));
            numCounting.add(new FieldInsnNode(Opcodes.PUTSTATIC, classNode_c.name, "count", "I"));    
            mn.instructions.insert(node, numCounting);

(我通常使用 asm 的方法是在纯 java 中编写我想用 asm 生成的方法,编译它并用 javap 查看生成的字节码。这通常是一个很好的指示要使用的操作码。)