Делаю задание по созданию java-приложения. Стоит задача изменения метода (формулы расчета) без перекомпиляции приложения. После поиска в гугле понял, что можно решить проблему с помощью javassist. Но пока совершенно не получается изменить тело метода. Пока пробую на простом примере. Итак, класс, содержащий единственный метод, который хочу поменять
package ru.testScandJavaCafee.service;
public class Helper2 {
public String createList()
{
System.out.println("++++");
return "1000";
}
}
и класс, из которого меняю метод
package ru.testScandJavaCafee.controller;
import javassist.*;
import ru.testScandJavaCafee.service.Helper2;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Created by 15 on 06.05.2017.
*/
public class Helper {
public static void main(String[] args) throws NotFoundException, CannotCompileException, NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException, InstantiationException {
Helper2 helper2 = new Helper2();
String simple2 = helper2.createList();
System.out.println(simple2);
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("ru.testScandJavaCafee.service.Helper2");
CtMethod cm = cc.getMethod("createList","()Ljava/lang/String;" );
cm.setBody( "{ System.out.println(\"----\"); return \"2222 \" ;}" );
cc.writeFile();
Method method1 = helper2.getClass().getMethod("createList");
// Вызвать метод с помощью invoke - передать туда только объект
String simple = (String)method1.invoke(helper2);
System.out.println("Simple:" + simple);
}
}
После запуска получаю на выходе
++++
1000
++++
1000
помогите разобраться, почему не выводится измененный метод
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Доброго времени сутокВ книге "Java SE 8 Базовый Курс" К
Если объект класса (основного в файле) не имеет интерфейса и используется на прямую как часть состояния другого объекта, можно ли сказать...
Нужно вывести все значения HashMap hmap за ключом GroupНо в метод передается пустой hmap