我正在寻找一个 BCEL 代码示例,了解如何创建包含 java.lang.Class 实例的大小为 1 的数组,并通过引用 java.lang.String.class 初始化其唯一元素
换句话说,我正在寻找一个 BCEL 代码示例来将“new Class[]{String.class}”放入堆栈中。
谢谢。
最佳答案
假设您要创建版本 49 (Java 5) 或更高版本的类文件,则所需的指令序列为:
iconst_1
anewarray
java/lang/Class
dup
iconst_0
ldc
java.lang.String.class
aastore
现在剩下的唯一问题是如何在BCEL中生成它。根据我从its website看到的,生成器代码可能如下所示:
il.append(InstructionConstants.ICONST_1);
il.append(factory.createNewArray(Type.getType(Class.class), 1));
il.append(InstructionConstants.DUP);
il.append(InstructionConstants.ICONST_0);
il.append(new LDC(constantPoolGen.addClass(Type.getType(String.class))));
il.append(InstructionConstants.AASTORE);
虽然我还没有测试过。
关于java - 将 "new Class[]{String.class}"放入堆栈的 BCEL 代码示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422815/