作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JEXL http://commons.apache.org/proper/commons-jexl/评估字符串。
我尝试了以下代码
String jexlExp = "'some text ' + output?'true':'false'";
JexlEngine jexl = new JexlEngine();
Expression e = jexl.createExpression(jexlExp);
JexlContext jc = new MapContext();
jc.set("output", false);
Object x = e.evaluate(jc);
System.out.println(x);
它正在将表达式计算为错误的结果。当我尝试连接两个字符串时,效果很好。当我尝试连接字符串和表达式时它不起作用。
那么,如何在 JEXL 中连接字符串和表达式?
最佳答案
JEXL 似乎正在执行 'some text'
的串联和output
三元运算符 ?:
之前已执行。
用你原来的表达,'some text ' + output?'true':'false'
,我得到的输出为 true
。我不完全确定为什么'some text ' + false
产量true
,但必须有某种隐式转换为 boolean
在这里进行。
使用 'some text ' + output
删除三元运算符,我得到some text false
.
在原始表达式中放置括号以明确表达正在发生的情况,我可以复制 true
的输出表达式 ('some text ' + output)?'true':'false'
.
在三元运算符两边加上括号,我可以让三元运算符先运算并得到输出 some text false
表达式 'some text ' + (output?'true':'false')
.
发生这种情况是因为三元运算符 ?:
优先级低于 +
JEXL 中的运算符,与 Java 的运算符优先级匹配。在适当的位置添加括号强制执行 ?:
运算符优先。
关于java - 如何在 JEXL 中连接字符串和表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878628/
我是一名优秀的程序员,十分优秀!