java - 将 "new Class[]{String.class}"放入堆栈的 BCEL 代码示例

标签 java bytecode bcel

我正在寻找一个 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/

相关文章:

java - 在接口(interface)的常量池中包含 java.lang.Object 的目的是什么?

C++如何制作lua "writer"

java - 字节码:LOOKUPSWITCH 和 TABLESWITCH

java - 为什么 java.lang.VerifyError 会阻止编译成功?

java - java中如何在不使用sort()方法的情况下对字符串进行排序?

没有堆栈的 Java "Thread-2"会阻止终止

java - 正则表达式匹配至少 2 个数字,字符串中任意顺序的 2 个字母

java - Java 服务提供 API 应该如何工作?

java - 重命名事物

java - 在哪里寻找开源 Java 库?