我有以下类结构-
class Student{
int age;
String name;
}
class Group{
Student allStudents[];
int avgAge;
}
class Handler{
public int myFunction(Group g){
...
do something with 'g'
...
return k;
}
}
我想使用自定义的"Group"对象从Javassist调用函数"myFunction",并测试该函数对此对象的行为。
在另一个场景中,我能够使用具有如下原始数据类型参数的函数-
ctBehavior.insertBefore("{for (int i=0; i < $args.length; i++) {System.out.println($args[i]);}}");
我想对作为自定义对象的参数执行类似的操作。
Javassist可以让你用Java(v1.4)编写任何东西。此外,它还提供了一些makro命令。如果你想创建一个组对象,取决于它的构造函数,它看起来像:
"myFunction(new Group((Student[]) $args[0], Integer.valueOf((Integer) $args[1])));"
请注意,Javassist不会自动装箱或取消装箱您的值。由$args
读取的任何值都是装箱的并且是Object
类型。这很可能是你观察到的问题。