Как преобразовать строку с математическим выражением в часть выполняемого кода?
Возможно ли преобразовать строку с математическим выражением в часть кода следующим образом:
Существует переменная типа String, которая инициализирована следующим: x*x*x.
В коде есть некоторый метод, который работал бы следующим образом:
public double someMethod(double x)
{
return (число, полученное вычислением выражения, которое содержится в вышеуказанной переменной);
}
Если такое возможно, как это можно реализовать?
Ответы (1 шт):
Автор решения: Alex Rudenko
→ Ссылка
В Java 8..11 Можно использовать JavaScript-движок Nashorn, впрочем он был помечен как deprecated в Java 11 и окончательно удалён в Java 15.
Данный движок поддерживает знаменитую функцию eval, выполняющую JavaScript на Java, тогда требуемый метод может выглядеть так:
public static double foo(double x) {
String script = "var x = " + x + ";";
String fun = "x * x * x";
try {
return (double) engine.eval(script + fun);
} catch (ScriptException screx) { // convert checked exception to Runtime
throw new RuntimeException(screx);
}
}
Или даже можно определить функцию в джаваскрипте и подставить в её вызов значение x:
public static double bar(double x) {
String script = "function f(x) { return x * x * x} f(" + x + ");";
try {
return (double) engine.eval(script);
} catch (ScriptException screx) {
throw new RuntimeException(screx);
}
}
Результаты:
System.out.println("foo(3) = " + foo(3)); // foo(3) = 27.0
System.out.println("bar(2) = " + bar(2)); // bar(2) = 8.0