Map.getOrDefault被坑小记与optional

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则抛处自定义异常;

相关推荐

十二生肖男肖女肖列表及性格特点概述
365体育旗下APP

十二生肖男肖女肖列表及性格特点概述

📅 09-30 👁️ 4286
一条狗的使命
365体育旗下APP

一条狗的使命

📅 07-21 👁️ 510
联想重装系统按哪个键
365bet投注网

联想重装系统按哪个键

📅 06-30 👁️ 739
化老汤功效和作用,《辨证录》卷四
365bet投注网

化老汤功效和作用,《辨证录》卷四

📅 09-23 👁️ 431
鱼缸里几条鱼最吉利:风水学中的鱼数指南
外围365bet网址

鱼缸里几条鱼最吉利:风水学中的鱼数指南

📅 09-14 👁️ 7695
csgo哪个箱子可以开刺刀 csgo回报率最高的箱子
365体育旗下APP

csgo哪个箱子可以开刺刀 csgo回报率最高的箱子

📅 07-03 👁️ 8413