2014-10-17 50 views

回答

1

假設你想創建一個類文件版本49(Java 5中)或更高,所需的指令序列爲:

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

雖然我沒有測試它。

+0

不幸的是,這拋出:ClassGenException:非法類型:類org.apache.bcel.generic.ObjectType – entzik 2014-10-20 09:34:21

+0

似乎'factory.createConstant'不能創建'Class'常量。但我在匆忙中也犯了一些其他的錯誤;我現在修好了。 – Holger 2014-10-20 10:27:30

+0

這就是我一直在尋找的,謝謝,非常感謝。 – entzik 2014-10-22 15:06:22