Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上课';使用Javassist初始化_Java_Javassist - Fatal编程技术网

上课';使用Javassist初始化

上课';使用Javassist初始化,java,javassist,Java,Javassist,使用Javassist,我在类之间创建耦合。然而,当我试图创建一个包含参数的类的实例时,显然存在一个问题。我真的希望能够获取CtClass的初始值设定项(如果它们不是空构造函数),然后传入它所期望的变量。例如,考虑我试图在类A: < /P>中创建类B的实例。 Public class B{ public int foo; public char spam; public B(int bar, char eggs){ foo = bar; spam = eggs; } } 目前,

使用Javassist,我在类之间创建耦合。然而,当我试图创建一个包含参数的类的实例时,显然存在一个问题。我真的希望能够获取CtClass的初始值设定项(如果它们不是空构造函数),然后传入它所期望的变量。例如,考虑我试图在类A: < /P>中创建类B的实例。
Public class B{
public int foo;
public char spam;
public B(int bar, char eggs){
    foo = bar;
    spam = eggs;
}
}

目前,我对类初始值设定项使用“isEmpty”检查,如果它不是空的,我尝试了以下两种方法。两者都给了我一个无此类构造函数错误的提示:

我认为方法“getClassInitializers”应该将CtClass的构造函数作为数组返回,但我不确定如何处理这个数组,eclipse甚至不允许我声明这个数组。我想循环遍历一个预期参数数组,并生成该类型的伪变量,这样我就可以做如下事情:
B注入B=newb(13,w)

更糟糕的情况是,我可以在B中创建一个空白的类初始值设定项,这样我就可以执行
injected B=new B()我认为我应该能够使用makeClassInitializer()方法,但这对我来说不起作用,因为我仍然没有遇到这样的构造函数错误。

解决了(某种程度上):

我混淆了构造函数和初始值设定项。它可以使用try/catch块,每当它进入catch块时,它都假定一个非空类构造函数,在这种情况下,它插入一个空构造函数:

    try{
    //stuff 

}catch(Exception e){
            //cc is the ctclass object
    CtConstructor blank = new CtConstructor(null, cc); 
    cc.addConstructor(blank);
}
我仍然希望找出如何收集期望的参数,而不是注入空构造函数

已解决(种类):

我混淆了构造函数和初始值设定项。它可以使用try/catch块,每当它进入catch块时,它都假定一个非空类构造函数,在这种情况下,它插入一个空构造函数:

    try{
    //stuff 

}catch(Exception e){
            //cc is the ctclass object
    CtConstructor blank = new CtConstructor(null, cc); 
    cc.addConstructor(blank);
}
我仍然希望找出如何收集期望的参数,而不是注入空构造函数