我在 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
奇怪的是,当值不在 hashmap 中时(即注释 fact.put 行),elvis 运算符似乎工作正常,并且两个表达式都按预期返回 false。
(使用spring-framework-3.0.5)