2016-08-04 4 views
1

У меня есть следующий класс структура -методы, ссылающаяся из 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; 
    } 
} 

Я хочу, чтобы вызвать функцию, «MYFUNCTION» от Javassist используя пользовательский объект «Group» и протестировать поведение функция для этого объекта.

В другом сценарии, я могу работать с функциями с параметрами примитивного типа данных следующим образом-

ctBehavior.insertBefore("{for (int i=0; i < $args.length; i++) {System.out.println($args[i]);}}"); 

Я хочу сделать что-то подобное для параметров, пользовательские объекты.

ответ

3

Javassist позволяет вам кодировать все, что вы могли бы написать на Java (v1.4). Кроме того, он дает вам несколько команд макро. Если вы хотите создать объект группы, в зависимости от его конструктора, это будет выглядеть примерно так:

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

Обратите внимание, что Javassist автоматически не коробка или распаковывать свои значения. Любое значение, считанное $args, помещается в коробку и типа Object. Скорее всего, это проблема, которую вы наблюдаете.