MVEL Null-Safe运算符是否适用于方法?

时间:2017-09-13 23:13:09

标签: mvel

我对MVEL null-safe(?)运算符有疑问。

说我有以下Java类:

public class Traveler {

    private Set<String> visitedCountries;

    public Set<String> getVisitedCountries() {
        return visitedCountries;
    }
}

如果我有这样的MVEL表达式:

traveler.visitedCountries.contains("France")

如果NullPointerException字段为空,则会收到visitedCountries。为了解决这个问题,我可以使用null-safe运算符:

traveler.?visitedCountries.contains("France")

如果visitedCountries为null,则此表达式的计算结果为null,而不是抛出NPE。

我的问题是:null-safe运算符是否可以处理方法调用?例如:

traveler.getVisitedCountries().contains("France")
如果NullPointerException返回null,

将抛出getVisitedCountries()

但是如果我放入零安全操作符会发生什么?如果字段visitedCountries为空,以下内容会怎样?

traveler.?getVisitedCountries().contains("France")

1 个答案:

答案 0 :(得分:0)

事实证明,表达方式

traveler.?getVisitedCountries().contains("France")

确实观察了null-safe运算符。它会在这里评估为null。单元测试:

@Test
public void testMVELNullSafeOnMethod() {
    Traveler traveler = new Traveler();
    // traveler visitedCountries field is null
    String expression = "traveler.getVisitedCountries().contains(\"France\")";
    Serializable exp = MVEL.compileExpression(expression);
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("traveler", traveler);
    Boolean response = (Boolean) MVEL.executeExpression(exp, map);
    assertTrue(response == null || !response);
}