MVEL NULL-SAFE操作员是否在方法上工作



我有一个有关mvel null-safe( ?)操作员的问题。

说我有以下Java类:

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

如果我有这样的Mvel表达:

traveler.visitedCountries.contains("France")

如果visitedCountries字段为null,则获得NullPointerException。为了解决这个问题,我可以使用Null-Safe操作员:

traveler.?visitedCountries.contains("France")

如果 visitedCountries为null,则此表达式评估为null而不是投掷NPE。

我的问题是:无效操作员是否在方法调用中工作?例如:

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

如果getVisitedCountries()返回null,将投掷NullPointerException

但是,如果我放入空安全操作员会发生什么?如果字段visitedCountries为null?

,以下会怎样?
traveler.?getVisitedCountries().contains("France")

事实证明,表达式

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

确实观察到无效的操作员。它将在这里评估为null。单位测试:

@Test
public void testMVELNullSafeOnMethod() throws Exception {
    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);
    assertNull(response);
}

最新更新