6.5.14 The Elvis Operator
我发现在SpEL中使用elvis操作符有一些不同的行为。如果我没有用括号"()“括起elvis表达式,则返回elvis运算符的结果,而忽略表达式的其余部分。示例代码显示了以下行为:
HashMap<String, String> facts = new HashMap<String, String>();
facts.put("flag", "flagvalue");
String expressionString;
Expression expression;
Object expressionResult;
expressionString = "[flag]?:'' matches '(?i)flagvalue'";
expression = new SpelExpressionParser().parseExpression(expressionString);
expressionResult = expression.getValue(facts);
System.out.println("Unexpected Result:" + expressionResult);
expressionString = "([flag]?:'') matches '(?i)flagvalue'";
expression = new SpelExpressionParser().parseExpression(expressionString);
expressionResult = expression.getValue(facts);
System.out.println("Expected Result:" + expressionResult);输出:
Unexpected Result:flagvalue
Expected Result:true奇怪的是,当值不在哈希表中(即注释facts.put行)时,elvis运算符似乎工作得很好,并且两个表达式都像预期的那样返回false。
(使用spring-framework-3.0.5)
发布于 2012-03-15 06:39:26
我认为您需要将您的示例扩展到Java表达式,以了解其中的区别,如下所示:
System.out.println(facts.containsKey("flag") ? facts.get("flag") : "".matches("(?i)flagvalue"))
System.out.println((facts.containsKey("flag") ? facts.get("flag") : "").matches("(?i)flagvalue"))哪种打印
flagvalue
true我还没有看过实现内部,但我猜'' matches '(?i)flagvalue'将首先被计算,因为matches是表达式树视图中的嵌套运算符。
希望这能有所帮助。
https://stackoverflow.com/questions/8063546
复制相似问题