最近遇到的需求,前端传来一系列数据,其中包括比较符,类似==、>=、!=等比较符号,由客户选择,由于不想使用繁琐的switch/case,以及不想日后需求变动导致的比较符增加而改动代码,便想办法将表达式拼接成字符串,再代码执行得到比较结果。
参考原博客:https://www.dazhuanlan.com/2020/05/30/5ed1dd2cd84cb/
原博客的写法中,ScriptEngineManager构造参数不填,这种写法在main方法中执行没毛病,而在工程项目代码中有问题。
代码如下:
/**
* 执行字符串逻辑表达式
*
* @param script 字符串逻辑表达式,类似"(16-9)>3"
* @return 执行结果
* @author ***
* @createDate 2021/02/04
*/
private boolean executeScript(String script) {
ScriptEngineManager factory = new ScriptEngineManager(null); // 因为本工程项目中没有引入JavaScript,必须填null,否则获取engine为null
ScriptEngine engine = factory.getEngineByName("JavaScript");
try {
return Boolean.parseBoolean(engine.eval(script).toString());
} catch (Exception e) {
return false;
}
}