Я использую ecj для генетического программирования, и я его построил, поэтому после запуска он выбирает подходящую индивидуальную программу и создает класс java с функцией из созданного lisp-кода ,Доступ к недавно скомпилированному среднему запуску программы
У меня тогда есть моя программа скомпилировать java-файл. Есть ли в любом случае я могу запустить вновь скомпилированный файл класса в том же запуске?
Я хочу, чтобы иметь возможность:
RunMain -> Создание Java -> Compile класса -> Функция вызова во вновь созданного класса -> EndMainRun
До сих пор, я имею проблема с вызовом метода во вновь создаваемом классе.
Каждый раз, когда я создаю новый java-файл и компилирую его, он переписывает старый. Но всякий раз, когда этот класс называется позже, он запускает старую функцию, предварительно перезаписываемую. Любые советы будут высоко оценены!
Редактировать: Вот несколько простых псевдокодов, чтобы показать, что у меня есть до сих пор, многое из них абстрагируется. Предположим, что перед запуском этого файла уже есть файл MathFunction.class.
PseudoCode
Main(){
runGeneticProgrammingAlgorithm();
generateJavaFileFromBestFitIndividual(name = MathFunction.java) //Replaces old MathFunction.java
compile(MathFunction.java) //using JavaCompilerApi, replaces old MathFunction.class
double value = MathFunction.calculate(25);
Старая функция возвращает -1 для значения, новая функция должна возвращать 5, но она все равно возвращает -1. Даже если бы это все в цикле, он будет держать выплевывая -1, -1, -1 ....
Edit 2:
Я все еще иметь его возвращают то же значение, несмотря на функция совершенно другая. Вот код:
URL[] urls = null;
File dir = new File("src" + java.io.File.separator + "ec");
URL url = dir.toURI().toURL();
urls = new URL[] { url };
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("ec.MathSolution");
MathSolution mathFunction = (MathSolution) cls.newInstance();
System.out.println(mathFunction.calculate(123.5));
Edit 3:
Обнаружили удивительный источник онлайн здесь: http://www.toptal.com/java/java-wizardry-101-a-guide-to-java-class-reloading
показать этот файл и командную серию, которую вы использовали до сих пор !!! –