Как преобразовать строку в исполняемый код в Java - PullRequest
1 голос
/ 07 октября 2019

Я храню Java-код в виде строки в базе данных. Например:

String x = "System.out.println(\"X\")";

Мне нужно преобразовать его в java.lang.Runnable, чтобы запустить его в службе исполнителя задач. Как я могу его создать?

private Runnable StringToRunnable(String task){
Runnable runnable = null;

return runnable;
}

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Я создал этот метод

    private void getMethod(String fromClass, String fromMethod) {
    Class<?> aClass;
    try {
        aClass = Class.forName(fromClass);
        Method method = aClass.getMethod(fromMethod);
        method.setAccessible(true);
        method.invoke(aClass.newInstance());
    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException | InstantiationException e) {
        e.printStackTrace();
    }
}

и назвал его

        Runnable task = () -> getMethod(fromClass, fromMethod);

, и я поместил имя_класса и имя метода в базу данных следующим образом:

this.getClass (). getCanonicalName () и имя строкового метода

0 голосов
/ 07 октября 2019

Janino - популярный выбор для компилятора по требованию. Он используется во многих проектах с открытым исходным кодом.

Использование прямо вперед. Код

import org.codehaus.janino.ScriptEvaluator;

public class App {

    public static void main(String[] args) throws Exception {

        String x = "System.out.println(\"X\");"; //<-- dont forget the ; in the string here
        ScriptEvaluator se = new ScriptEvaluator();  
        se.cook(x);
        se.evaluate(new Object[0]);    
    }
}

печатает x.

Как уже отмечали другие, загрузка кода из базы данных и его выполнение могут быть немного рискованными.

...