我正在寻找关于如何创建包含 java.lang.Class 实例的大小为 1 的数组并使用对 java.lang.String.class 的引用初始化其唯一元素的 BCEL 代码示例
换句话说,我正在寻找一个 BCEL 代码示例来将“new Class[]{String.class}”放在堆栈上。
谢谢。
假设您要创建 49 (Java 5) 或更高版本的类文件,所需的指令序列为:
iconst_1
anewarray
java/lang/Class
dup
iconst_0
ldc
java.lang.String.class
aastore
现在剩下的唯一问题是如何在BCEL中生成它。根据我从其网站上看到的,生成器代码可能如下所示:
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);
虽然我没有测试过。