実行時に文字列として定義された式を評価できるエンジン/ライブラリが必要です。評価コードを関数呼び出し(例えばラムダ関数)にラップすると、必要なものが得られます。
オプション1:exp4jを使用できます。 exp4jは、フットプリントの小さいライブラリで、実行時に式と関数を評価することができます。次に例を示します。
Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)")
.variables("x", "y")
.build()
.setVariable("x", 2.3)
.setVariable("y", 3.14);
double result = e.evaluate();
オプション2:あなたはJava's script engineを使用することができます。あなたはJavaScriptで、例えば、定義された式を評価するためにそれを使用することができます:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("sin(1.25)");
オプション3:ネイティブJavaへコンパイル。この方法では、テンプレートを使用して、式を含むクラスで.javaファイルを生成します。あなたがJavaコンパイラを呼び出すよりも。このアプローチには、インプリメンテーションにある程度の複雑さと初期レイテンシ(クラスがコンパイルされるまで)があるが、パフォーマンスが最も優れているという欠点があります。ここではいくつかのリンクが探求している。
ノートでは、あなたがセキュリティについて考える必要が心を持っています。セキュリティ制限なしで評価できるコードをユーザーが入力できるようにすることは非常に危険です。
オプション3はバイトコード生成(コンパイル時にはビルドツールプラグインを使用)または実行時に拡張できます。 –
ご協力いただきありがとうございます。私は第3のオプションをどのように使用できるかについてのリンクを掲載することができますか?それはかなり面白いようです。 – odermark
@odermarkは、応答へのリンクを追加しました。私は最初にあなたに良いスタートを与えるべきだと思います。 –