BCEL代码示例将“new Class [] {String.class}”放在堆栈上

时间:2014-10-17 10:15:36

标签: java bytecode bcel

我正在寻找一个BCEL代码示例,介绍如何创建包含java.lang.Class实例的大小为1的数组,并使用对java.lang.String.class的引用初始化其唯一元素

换句话说,我正在寻找一个BCEL代码示例来放置" new Class [] {String.class}"在堆栈上。

感谢。

1 个答案:

答案 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);

虽然我没有测试过。