Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring表达式语言(SpEL)中的Elvis运算符_Java_Spring El - Fatal编程技术网

Java Spring表达式语言(SpEL)中的Elvis运算符

Java Spring表达式语言(SpEL)中的Elvis运算符,java,spring-el,Java,Spring El,我在SpEL中看到一些使用elvis运算符的trange行为。如果不将elvis表达式括在括号“()”中,则返回elvis运算符的结果,并忽略表达式的其余部分。显示以下行为的示例代码: HashMap<String, String> facts = new HashMap<String, String>(); facts.put("flag", "flagvalue"); String expressionString; Expressio

我在SpEL中看到一些使用elvis运算符的trange行为。如果不将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);
奇怪的是,当值不在hashmap中(即注释facts.put行)时,elvis运算符似乎工作正常,并且两个表达式按预期返回false


(使用spring-framework-3.0.5)

我认为您需要将示例扩展到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
是表达式树视图中的嵌套运算符

希望这有帮助

flagvalue
true