0

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

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

谢谢。

4

1 回答 1

1

假设您要创建 49 (Java 5) 或更高版本的类文件,所需的指令序列为:

iconst_1
anewarrayjava/lang/Class
dup
iconst_0
ldcjava.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);

虽然我没有测试过。

于 2014-10-17T15:44:26.957 回答