我可以严格评估在Java中存储为字符串的布尔表达式吗?

我希望能够评估存储为字符串的布尔表达式,如下所示:

"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类,如果您尝试将字符串与数字进行比较,则会抛出类型错误.

点赞