次のように、文字列として保存されたブール式を評価できるようにしたいと思います。
"hello" == "goodbye" && 100 < 101
SO にはすでにこのような質問がたくさんあることは知っていますが、この質問に対する最も一般的な回答であるBeanShellを試したので、これを質問しています。これにより、このようなステートメントの評価が可能になります
"hello" == 100
まったく問題なく。オペランドの不一致などでエラーをスローする FOSS パーサーを知っている人はいますか? または、私を助ける BeanShell の設定はありますか? 私はすでに Interpreter.setStrictJava(true) を試しました。
完全を期すために、現在使用しているコードは次のとおりです。
Interpreter interpreter = new Interpreter();
interpreter.setStrictJava(true);
String testableCondition = "100 == \"hello\"";
try {
interpreter.eval("boolean result = ("+ testableCondition + ")");
System.out.println("result: "+interpreter.get("result"));
if(interpreter.get("result") == null){
throw new ValidationFailure("Result was null");
}
} catch (EvalError e) {
e.printStackTrace();
throw new ValidationFailure("Eval error while parsing the condition");
}
編集:
私が現在持っているコードは、この出力を返します
result: false
エラーなし。私がやりたいことは、EvalError をスローするか、不一致のオペランドがあったことを知らせる何かをスローすることです。