Java 验证错误:opc\U调用接口的参数大小不一致

Java 验证错误:opc\U调用接口的参数大小不一致,java,javassist,Java,Javassist,我一直在尝试生成一些动态代码(使用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) {

我一直在尝试生成一些动态代码(使用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;
}
    testapp1.Customers temp=(testapp1.Customers)graph;
    output.processDouble(temp.Dubs[1]);
生成的代码如下所示

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;
}
    testapp1.Customers temp=(testapp1.Customers)graph;
    output.processDouble(temp.Dubs[1]);
但当getDeclaredConstructors被称为c.getDeclaredConstructors()时,问题就出现了。。。它抛出以下错误

线程“main”java.lang.VerifyError中出现异常:(类:testapp1/Dyn,方法:processDouble signature:(Lsomething/Output;Ljava/lang/Object;)V)opc\u invokeinterface的参数大小不一致

存在一个变通方法,但没有任何意义,即,如果我只是创建一个double数组的副本并在动态代码中将其传递给processDouble,那么一切都可以正常工作 i、 e.如果动态代码为

    testapp1.Customers temp=(testapp1.Customers)graph;
    double[] d = temp.Dubs;
    output.processDouble(d);
简而言之,未处理的异常是由getDeclaredConstructor引发的,但它实际上与构造函数无关,因为不管我是否创建了一个构造函数


希望我的问题和代码足够清楚,如果有任何混淆,请告诉我,提前谢谢:)

验证错误从getDeclaredConstructors中抛出,因为这是类c中字节码的第一个验证位置

至于错误的原因,我怀疑这与以下事实有关:在第一种情况下,你传递了一个双精度,在第二种情况下,传递了一个双精度[]