[转]Map.getOrDefault被坑小记与optional

原文地址:https://www.lmlphp.com/user/19461/article/item/482751/

错误使用样例
    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的应用常用的有以下几种:
  • 区别于of() 不可以为null,而ofNullable()可以为null;
  • 判断值是否存在,可实现内部consumer实现若不存在的函数回调;
  • 判断值是否为null,若不为null则取当前值。
    • orElse():判断为null则取orElse()中的值
    • orElseGet():判断为null则执行自定义的回调函数;
    • orElseThrow():判断为null则抛处自定义异常;
posted @   dirgo  阅读(72)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2016-04-07 [转]在html中控制自动换行
点击右上角即可分享
微信分享提示