我一直在尝试生成一些动态代码(使用Javassist),但程序在涉及双数组或浮点数组时在某一点失败.代码如下
Class c = Customers.class; // called in main & Customer class just has a double[] Dubs = new double[10]
CreateType(c); // Main
public static Object CreateType(Class genericType)
{
// some preReq declarations
CtMethod writeCode = dyn.getDeclaredMethod("processCode");
generateCode(genericType, Code, "temp"); // Code is a StringBuilder class
System.out.println(Code);
writeCode.insertAt(1, Code.toString()); // Compilation is successful
Class c = dyn.toClass();
Dynamic h;
Constructor[] ctorlist = null;
ctorlist = c.getDeclaredConstructors(); // Problem is here
h = (DynamicSurrogate) ctorlist[0].newInstance(genericType);
return h;
}
Run Code Online (Sandbox Code Playgroud)
生成的代码如下
testapp1.Customers temp=(testapp1.Customers)graph;
output.processDouble(temp.Dubs[1]);
Run Code Online (Sandbox Code Playgroud)
但是当getDeclaredConstructors被调用c.getDeclaredConstructors()时会出现问题...它会抛出以下错误
例外在线程 "主" java.lang.VerifyError的:(等级:testapp1 /强啡肽,方法:processDouble签名:(Lsomething /输出; Ljava /郎/对象;)V),用于opc_invokeinterface不一致args_size
一种解决方法,但没有任何意义,即一切工作正常,如果我只需要创建一个双数组的一个拷贝,并把它传递给processDouble在IE动态代码,如果动态代码
testapp1.Customers temp=(testapp1.Customers)graph;
double[] d = temp.Dubs;
output.processDouble(d);
Run Code Online (Sandbox Code Playgroud)
简而言之,getDeclaredConstructor抛出异常Unhandled,但它实际上与构造函数无关,因为如果我创建一个或者没有
希望我的问题和代码足够清楚,如果有任何混淆请告诉,谢谢你提前:)
验证错误从 getDeclaredConstructors 中抛出,因为这是验证类 c 中的字节码的第一个地方。
至于错误的原因,我怀疑这与以下事实有关:在第一种情况下,您传递了一个 double,而在第二种情况下,您传递了一个 double[]。
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |