Пожалуйста, смотрите ниже код создания класса и метода с использованием javassist:
public Class generateClass(String className, String methodName)
throws CannotCompileException, NotFoundException {
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.makeClass(className);
ClassLoader classLoader = FormulaAPI.class.getClassLoader();
pool.appendClassPath(new LoaderClassPath(classLoader));
pool.importPackage("com.formula");
String methodBody = "return ($w)($1.evaluate(\"L\") + 25.0);";
CtClass apiClass = pool.get("com.formula.FormulaAPI");
CtClass doubleWrapperClass = pool.get("java.lang.Double");
CtMethod m = new CtMethod(doubleWrapperClass,methodName,new CtClass[]{apiClass},cc);
m.setBody(methodBody);
cc.addMethod(m);
return cc.toClass();
}
После вызова этого метода я получаю ошибку:
Исключение в потоке "main" java .lang.VerifyError: (класс: формулы, метод: Formula Signature: (Lcom / Formbuilder / FormulaAPI;) Ljava / lang / Double;) Неправильный тип возврата в функции
Не поддерживает ли Javassist поддержка чисел c операций в теле метода? Я пытаюсь вызвать метод и добавить число к нему, прежде чем он возвращает значение, как показано ниже:
String methodBody = "return ($w)($1.evaluate(\"L\") + 25.0);";
Как я могу достичь числительных c операций, таких как +, *, /, <, <= и др c. в теле метода? </p>