2017-09-13 4 views
0

MVEL null-safe (?) 연산자와 관련하여 질문이 있습니다. 나는이 같은 MVEL 표현이있는 경우MVEL Null-Safe 연산자가 메서드에서 작동합니까?

public class Traveler { 

    private Set<String> visitedCountries; 

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

:

나는 다음과 같은 자바 클래스가 말
traveler.visitedCountries.contains("France") 

내가 얻을를 visitedCountries 필드가 null NullPointerException 경우. 이 문제를 얻으려면, 내가 널 안전 연산자를 사용할 수 있습니다 : null의

traveler.?visitedCountries.contains("France") 

visitedCountries 경우,이 표현은 NPE를 던지는 대신 null로 평가합니다.

제 질문은 null 안전 연산자가 메서드 호출에서 작동합니까? 예를 들어 :

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

가 null의 경우, NullPointerExceptiongetVisitedCountries() 경우 수익을 발생합니다.

하지만 null-safe 연산자를 사용하면 어떻게됩니까? 필드 visitedCountries이 null이면 다음 작업은 어떻게됩니까?

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

답변

0

것이 판명 된 바와 같이,

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

귀무 안전한 조작을 관찰 않는 식이다. 여기서 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); 
}