我有一个Java程序,它根据用户输入生成数学方程式。我想评估这个等式,但迭代它的语法树是相当慢的。更快的解决方案是将等式放入Java文件,编译它,并调用已编译的代码(在运行时)。以下是我目前正在做的事情:
使用该函数作为静态成员创建Equation.java
文件。例如,如果生成的等式为3*x + 2*y
(实际等式要复杂得多),程序将创建文件
public class Equation {
public static DoubleBinaryOperator equation = (x, y) -> 3*x + 2*y;
}
Equation.class
这是一个大量的样板,似乎应该很简单。是否有更简单的方法将此等式转换为函数并在运行时调用它?
答案 0 :(得分:1)
根据您的等式的复杂程度,JavaScript评估引擎Nashorn
可能值得一试。
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
Object o = engine.eval("1 + 2 * 3");
System.out.println(o); // prints 7
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("x", 10);
System.out.println(engine.eval("x + 1")); // prints 11
答案 1 :(得分:0)