錯誤使用樣例
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則拋處自定義異常;