从 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。这很可能是您正在观察的问题。