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

标签 java boolean eval beanshell

我希望能够计算存储为字符串的 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/

相关文章:

c - PostgreSQL:从 C 函数评估 SQL 表达式

java - ActiveMQ Broker 只能在本地主机上连接

Java:如何将控件而不是其数据拖放到新位置?

c++ - 无论如何在 C++ 中将 2 维数组煮沸为整数?

c# - 如何在 C# 互操作调用中从 C# 实例化数组中的 C 取回数据?

python -\r\n 与 python eval 函数中的\n

java - 在 Java Web 应用程序中从应用程序服务器外部提供静态数据的最简单方法

java - 如何修复线程 "main"java.lang.NoSuchMethodError : org. apache.poi.POIXMLDocumentPart.getPackageRelationship 中的此异常

c++ - bool 函数问题 - 总是返回 true?

python - 如何使用带原始文字化的字符串正则表达式作为正确的正则表达式