我希望能够计算存储为字符串的 boolean 表达式,如下所示:
"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 或某事让我知道存在不匹配的操作数。
最佳答案
在 Java 6 中,您可以动态调用编译器,如本文所述:
http://www.ibm.com/developerworks/java/library/j-jcomp/index.html
您可以使用它来动态地将您的表达式编译成 Java 类,如果您尝试将字符串与数字进行比较,这将抛出类型错误。
关于java - 我可以严格评估在 Java 中存储为字符串的 boolean 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992071/