2017-09-13 4 views
0

MVEL null-safe(?)演算子に関する質問があります。MVEL Nullセーフオペレータはメソッドで動作しますか?

は、私は次のJavaクラスがあるとしましょう:

public class Traveler { 

    private Set<String> visitedCountries; 

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

私はこのようなMVEL表現している場合:

traveler.visitedCountries.contains("France") 

visitedCountriesフィールドがnullの場合、私はNullPointerExceptionを取得します。 visitedCountriesがnullの場合、この式は、NPEを投げるのではなくNULLに評価され

traveler.?visitedCountries.contains("France") 

:この問題を回避するために、私はnullで安全な演算子を使用することができます。

私の質問はこれですか?ヌルセーフな演算子はメソッド呼び出しで動作しますか?たとえば:

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

はヌルNullPointerExceptiongetVisitedCountries()かのリターンをスローします。

しかし、nullの安全な演算子を入れるとどうなりますか?フィールドvisitedCountriesがヌルの場合、次の処理は何ですか?

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

答えて

0

結局のところ、表現

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

はnullで安全な作業を観察しません。ここで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); 
} 
関連する問題