从 Javassist 调用以对象作为参数的方法
Invoking methods from Javassist, that have objects as parameter
我有以下 class 结构 -
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
。这很可能是您正在观察的问题。
我有以下 class 结构 -
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
。这很可能是您正在观察的问题。