从Javassist调用方法,将对象作为参数

时间:2016-08-04 07:40:32

标签: reflection jvm asmx aop javassist

我有以下课程结构 -

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]);}}");

我想对自定义对象的参数执行类似的操作。

1 个答案:

答案 0 :(得分:3)

Javassist允许您编写可以用Java编写的任何内容(v1.4)。此外,它还为您提供了一些makro命令。如果要创建组对象,则根据其构造函数,它看起来像:

"myFunction(new Group((Student[]) $args[0], Integer.valueOf((Integer) $args[1])));"

请注意,Javassist不会自动对您的值进行装箱或取消装箱。 $args读取的任何值都已加框并且类型为Object。这很可能是您正在观察的问题。