摘要:示例在項(xiàng)目中有發(fā)現(xiàn)類似下方的代碼實(shí)際運(yùn)行時(shí)偶爾出現(xiàn)錯(cuò)誤原因在于對(duì)應(yīng)的值為而的和均不可為值特別是對(duì)于的問題在對(duì)應(yīng)的中有討論官方建議使用的方式來包裝在不允許用值的情況下也更方便除外包括等其它組件也是不允許這點(diǎn)需要注意如果想直接用允許的值的不可變
示例
在項(xiàng)目中有發(fā)現(xiàn)類似下方的代碼,
Map tmpParams = ImmutableMap.of( "extraInfos", ext.get("extraInfos"), "otherParams" , ImmutableMap.builder() .put("version" , 0) .put("orderId" , MapUtils.getString(ext,"orderId");
實(shí)際運(yùn)行時(shí)偶爾出現(xiàn)npe錯(cuò)誤, 原因在于orderId對(duì)應(yīng)的值為null, 而ImmutableMap的key和value均不可為null值.
特別是對(duì)于null vlaues的問題, 在guava對(duì)應(yīng)的github issue中有討論
官方建議使用Optional的方式來包裝, 在不允許用null值的情況下inline/stream也更方便.
除ImmutableMap外, 包括LoadingCache等其它guava組件也是不允許null vlaues, 這點(diǎn)需要注意.
如果想直接用允許Null的值的不可變map, 可以這樣
MaptestMap = new HashMap<>(); testMap.put("a", "1"); Map immutableMap = Collections.unmodifiableMap(new HashMap<>(testMap));
此時(shí)不能直接更改key和value, 但如果value是對(duì)象, 其field可以修改
總結(jié)簡單總結(jié)一下, ImmutableMap的使用場景:
適合
確定性的配置, 比如根據(jù)不同的key值得到不同的請(qǐng)求url
寫單元測試
不適合
key, value為未知參數(shù), 可能有null產(chǎn)生的情況
感受上面的例子如果用HashMap寫, 不會(huì)有任何問題, 所以使用工具類時(shí)最好有一定了解, 不然可能會(huì)有一些意外問題出現(xiàn).
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77347.html
摘要:整個(gè)這個(gè)雷區(qū)面板都是由的和組成的,最后由的方法對(duì)其進(jìn)行不可變化處理剩下的主要邏輯部分就是掃雷了,傳入掃雷游戲?qū)ο笠粋€(gè)不可變結(jié)構(gòu)做為第一個(gè)參數(shù),以及要掃的那個(gè)雷區(qū)塊對(duì)象,最后返回新的掃雷游戲?qū)嵗? 不可變性(Immutability)是函數(shù)式編程的核心原則,在面向?qū)ο缶幊汤镆灿写罅繎?yīng)用。在這篇文章里,我會(huì)給大家秀一下到底什么是不可變性(Immutability)、她為什么還這么屌、以及在...
摘要:概述一個(gè)規(guī)范易懂和優(yōu)雅,以及結(jié)構(gòu)清晰且易于理解的響應(yīng)結(jié)構(gòu),完全可以省去許多無意義的溝通和文檔。 概述 一個(gè)規(guī)范、易懂和優(yōu)雅,以及結(jié)構(gòu)清晰且易于理解的API響應(yīng)結(jié)構(gòu),完全可以省去許多無意義的溝通和文檔。 預(yù)覽 操作成功: { status: true, timestamp: 1525582485337 } 操作成功:返回?cái)?shù)據(jù) { status: true, ...
摘要:尼古拉斯沃茲基碩德我們已經(jīng)有了,為什么還需要另外一個(gè)庫呢因?yàn)楹糜脝h日常編碼中經(jīng)常會(huì)遇到下面的代碼經(jīng)過的修剪后可以變成這樣甚至這樣其實(shí)這種結(jié)構(gòu),就是一個(gè)二維映射,把它包裝成了。但的完美處理雙向映射。當(dāng)然,在使用時(shí),會(huì)要求的唯一性。 Google Guava是把小巧又鋒利的瑞士軍刀,把你的代碼修剪得整潔又漂亮。-------------尼古拉斯·沃茲基碩德 1. Google Collec...
摘要:前言最近應(yīng)公司業(yè)務(wù)需求,把微信支付完成了,當(dāng)然已經(jīng)順利上線。第三步查詢訂單該接口提供所有微信支付訂單的查詢,商戶可以通過該接口主動(dòng)查詢訂單狀態(tài),完成下一步的業(yè)務(wù)邏輯。 前言 最近應(yīng)公司業(yè)務(wù)需求,把微信支付完成了,當(dāng)然已經(jīng)順利上線。但是開發(fā)的過程是也是踩了很多坑,下面我就先說說開發(fā)流程,以及在開發(fā)中遇到的大大小小的坑。 開發(fā)流程 首先,看一下微信開方平臺(tái)關(guān)于支付的一個(gè)時(shí)序圖,如下: sh...
摘要:努力避免硬編碼。一個(gè)類的總體行數(shù)盡量控制在行左右不超過一千行。函數(shù)注釋函數(shù)注釋采用,在每個(gè)函數(shù)或者過程的前面要有必要的注釋信息,包括函數(shù)或過程名稱功能描述輸入輸出及返回值說明調(diào)用關(guān)系及被調(diào)用關(guān)系說明等。 前言 推薦Google的Java編碼規(guī)范英文版: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 雖然...
閱讀 2417·2021-11-11 16:54
閱讀 1220·2021-09-22 15:23
閱讀 3663·2021-09-07 09:59
閱讀 2014·2021-09-02 15:41
閱讀 3296·2021-08-17 10:13
閱讀 3068·2019-08-30 15:53
閱讀 1248·2019-08-30 13:57
閱讀 1220·2019-08-29 15:16