1

使用 Javassist,我正在创建类之间的耦合。但是,当我尝试创建一个接受参数的类的实例时,显然存在一个问题。我真的希望能够获取 CtClass 的初始化程序(如果它们不是空的构造函数),然后传入它所期望的变量。例如,考虑我正在尝试在 A 类中创建 B 类的实例:

Public class B{
public int foo;
public char spam;
public B(int bar, char eggs){
    foo = bar;
    spam = eggs;
}

}

Public class A{
    B injected = new B(X,X);
}

目前我对类初始化程序使用“isEmpty”检查,如果它不为空,我尝试了以下两种方法。两者都给我一个没有这样的构造函数错误:

我认为“getClassInitializers”方法应该将 CtClass 的构造函数作为数组返回,但我不确定如何处理这个数组,eclipse 甚至不会让我声明。我想遍历一组预期参数并制作该类型的虚拟变量,以便我可以执行以下操作:B injected B = new B (13, w);

更糟糕的情况是,我可以在 B 中创建一个空白类初始值设定项,所以injected B = new B();我认为我应该能够使用 makeClassInitializer() 方法,但这对我不起作用,因为我仍然得到一个 no such constructor 错误。

4

1 回答 1

1

已解决(种类):

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

    try{
    //stuff 

}catch(Exception e){
            //cc is the ctclass object
    CtConstructor blank = new CtConstructor(null, cc); 
    cc.addConstructor(blank);
}

我仍然希望弄清楚如何收集预期的参数而不是注入空的构造函数。

于 2013-05-24T01:40:50.617 回答