我对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")
答案 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);
}