我正在寻找一个BCEL代码示例,介绍如何创建包含java.lang.Class实例的大小为1的数组,并使用对java.lang.String.class的引用初始化其唯一元素
换句话说,我正在寻找一个BCEL代码示例来放置" new Class [] {String.class}"在堆栈上。
感谢。
答案 0 :(得分:1)
假设您要创建类文件版本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);
虽然我没有测试过。