使用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()方法,但这对我不起作用,因为我仍然得到一个没有这样的构造函数错误。
答案 0 :(得分:1)
解决(种类):
我混淆了构造函数和初始化程序。它可以使用try / catch块,每当它进入catch块时,它就会假定一个非空的类构造函数,在这种情况下它会插入一个空的构造函数:
try{
//stuff
}catch(Exception e){
//cc is the ctclass object
CtConstructor blank = new CtConstructor(null, cc);
cc.addConstructor(blank);
}
我仍然希望弄清楚如何收集预期的参数而不是注入空的构造函数。