我有一个有关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);
}