MVEL Null-Safe 运算符是否适用于方法?
Does the MVEL Null-Safe operator work on methods?
我有一个关于 MVEL 空安全 (?
) 运算符的问题。
假设我有以下 Java class:
public class Traveler {
private Set<String> visitedCountries;
public Set<String> getVisitedCountries() {
return visitedCountries;
}
}
如果我有这样的 MVEL 表达式:
traveler.visitedCountries.contains("France")
如果 visitedCountries
字段为空,我会得到一个 NullPointerException
。为了解决这个问题,我可以使用空安全运算符:
traveler.?visitedCountries.contains("France")
如果 visitedCountries
为 null,则此表达式的计算结果为 null 而不是抛出 NPE。
我的问题是:空安全运算符是否适用于方法调用?例如:
traveler.getVisitedCountries().contains("France")
如果 getVisitedCountries()
returns 为空, 将抛出 NullPointerException
。
但是如果我输入空安全运算符会发生什么?如果字段 visitedCountries
为 null,下面会做什么?
traveler.?getVisitedCountries().contains("France")
事实证明,表达式
traveler.?getVisitedCountries().contains("France")
确实遵守 null 安全运算符。它会在这里评估为 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);
}
我有一个关于 MVEL 空安全 (?
) 运算符的问题。
假设我有以下 Java class:
public class Traveler {
private Set<String> visitedCountries;
public Set<String> getVisitedCountries() {
return visitedCountries;
}
}
如果我有这样的 MVEL 表达式:
traveler.visitedCountries.contains("France")
如果 visitedCountries
字段为空,我会得到一个 NullPointerException
。为了解决这个问题,我可以使用空安全运算符:
traveler.?visitedCountries.contains("France")
如果 visitedCountries
为 null,则此表达式的计算结果为 null 而不是抛出 NPE。
我的问题是:空安全运算符是否适用于方法调用?例如:
traveler.getVisitedCountries().contains("France")
如果 getVisitedCountries()
returns 为空, 将抛出 NullPointerException
。
但是如果我输入空安全运算符会发生什么?如果字段 visitedCountries
为 null,下面会做什么?
traveler.?getVisitedCountries().contains("France")
事实证明,表达式
traveler.?getVisitedCountries().contains("France")
确实遵守 null 安全运算符。它会在这里评估为 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);
}