0
我正在尋找關於如何創建包含java.lang.Class實例的大小爲1的數組的BCEL代碼示例,並初始化其只有引用java.lang.String.class的元素在堆棧上放置「new Class [] {String.class}」的BCEL代碼示例
其他術語,我正在尋找一個BCEL代碼示例將「new Class [] {String.class}」放在堆棧上。
謝謝。
我正在尋找關於如何創建包含java.lang.Class實例的大小爲1的數組的BCEL代碼示例,並初始化其只有引用java.lang.String.class的元素在堆棧上放置「new Class [] {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中生成該問題。據我從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);
雖然我沒有測試它。
不幸的是,這拋出:ClassGenException:非法類型:類org.apache.bcel.generic.ObjectType – entzik 2014-10-20 09:34:21
似乎'factory.createConstant'不能創建'Class'常量。但我在匆忙中也犯了一些其他的錯誤;我現在修好了。 – Holger 2014-10-20 10:27:30
這就是我一直在尋找的,謝謝,非常感謝。 – entzik 2014-10-22 15:06:22