摘要:示例在项目中有发现类似下方的代码实际运行时偶尔出现错误原因在于对应的值为而的和均不可为值特别是对于的问题在对应的中有讨论官方建议使用的方式来包装在不允许用值的情况下也更方便除外包括等其它组件也是不允许这点需要注意如果想直接用允许的值的不可变
示例
在项目中有发现类似下方的代码,
Map tmpParams = ImmutableMap.of( "extraInfos", ext.get("extraInfos"), "otherParams" , ImmutableMap.builder() .put("version" , 0) .put("orderId" , MapUtils.getString(ext,"orderId");
实际运行时偶尔出现npe错误, 原因在于orderId对应的值为null, 而ImmutableMap的key和value均不可为null值.
特别是对于null vlaues的问题, 在guava对应的github issue中有讨论
官方建议使用Optional的方式来包装, 在不允许用null值的情况下inline/stream也更方便.
除ImmutableMap外, 包括LoadingCache等其它guava组件也是不允许null vlaues, 这点需要注意.
如果想直接用允许Null的值的不可变map, 可以这样
MaptestMap = new HashMap<>(); testMap.put("a", "1"); Map immutableMap = Collections.unmodifiableMap(new HashMap<>(testMap));
此时不能直接更改key和value, 但如果value是对象, 其field可以修改
总结简单总结一下, ImmutableMap的使用场景:
适合
确定性的配置, 比如根据不同的key值得到不同的请求url
写单元测试
不适合
key, value为未知参数, 可能有null产生的情况
感受上面的例子如果用HashMap写, 不会有任何问题, 所以使用工具类时最好有一定了解, 不然可能会有一些意外问题出现.
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/77347.html
摘要:整个这个雷区面板都是由的和组成的,最后由的方法对其进行不可变化处理剩下的主要逻辑部分就是扫雷了,传入扫雷游戏对象一个不可变结构做为第一个参数,以及要扫的那个雷区块对象,最后返回新的扫雷游戏实例。 不可变性(Immutability)是函数式编程的核心原则,在面向对象编程里也有大量应用。在这篇文章里,我会给大家秀一下到底什么是不可变性(Immutability)、她为什么还这么屌、以及在...
摘要:概述一个规范易懂和优雅,以及结构清晰且易于理解的响应结构,完全可以省去许多无意义的沟通和文档。 概述 一个规范、易懂和优雅,以及结构清晰且易于理解的API响应结构,完全可以省去许多无意义的沟通和文档。 预览 操作成功: { status: true, timestamp: 1525582485337 } 操作成功:返回数据 { status: true, ...
摘要:尼古拉斯沃兹基硕德我们已经有了,为什么还需要另外一个库呢因为好用呗日常编码中经常会遇到下面的代码经过的修剪后可以变成这样甚至这样其实这种结构,就是一个二维映射,把它包装成了。但的完美处理双向映射。当然,在使用时,会要求的唯一性。 Google Guava是把小巧又锋利的瑞士军刀,把你的代码修剪得整洁又漂亮。-------------尼古拉斯·沃兹基硕德 1. Google Collec...
摘要:前言最近应公司业务需求,把微信支付完成了,当然已经顺利上线。第三步查询订单该接口提供所有微信支付订单的查询,商户可以通过该接口主动查询订单状态,完成下一步的业务逻辑。 前言 最近应公司业务需求,把微信支付完成了,当然已经顺利上线。但是开发的过程是也是踩了很多坑,下面我就先说说开发流程,以及在开发中遇到的大大小小的坑。 开发流程 首先,看一下微信开方平台关于支付的一个时序图,如下: sh...
摘要:努力避免硬编码。一个类的总体行数尽量控制在行左右不超过一千行。函数注释函数注释采用,在每个函数或者过程的前面要有必要的注释信息,包括函数或过程名称功能描述输入输出及返回值说明调用关系及被调用关系说明等。 前言 推荐Google的Java编码规范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然...
阅读 2354·2021-11-11 16:54
阅读 1168·2021-09-22 15:23
阅读 3586·2021-09-07 09:59
阅读 1931·2021-09-02 15:41
阅读 3255·2021-08-17 10:13
阅读 2971·2019-08-30 15:53
阅读 1207·2019-08-30 13:57
阅读 1169·2019-08-29 15:16