Map.getOrDefault被坑小記與optional


錯誤使用樣例
	map.getOrDefault("account","").toString();
在運行幾小時后,發現報錯空指針;查看源碼如下:
    default V getOrDefault(Object key, V defaultValue) {
        V v;
        return (((v = get(key)) != null) || containsKey(key))
            ? v
            : defaultValue;
    }
  • 竟然是||運算,如果containsKey 或者getkey() != null 則獲取;
  • 如果包含key的value為null,則會獲取null值導致空指針;
建議使用java8的Optional來判空:
	Optional.ofNullable(map.get("account")).orElse("");	
  • 上述為判斷map中key是否為null,如果是則返回orElse中的值;

對於Optional的應用常用的有以下幾種:

Optional.of()、Optional.ofNullable()

  • 區別於of() 不可以為null,而ofNullable()可以為null;

Optional.ifPresent()

  • 判斷值是否存在,可實現內部consumer實現若不存在的函數回調;

Optional.orElse()、orElseGet()、orElseThrow()

  • 判斷值是否為null,若不為null則取當前值。
    • orElse():判斷為null則取orElse()中的值
    • orElseGet():判斷為null則執行自定義的回調函數;
    • orElseThrow():判斷為null則拋處自定義異常;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM