摘要:示例在項目中有發現類似下方的代碼實際運行時偶爾出現錯誤原因在于對應的值為而的和均不可為值特別是對于的問題在對應的中有討論官方建議使用的方式來包裝在不允許用值的情況下也更方便除外包括等其它組件也是不允許這點需要注意如果想直接用允許的值的不可變
示例
在項目中有發現類似下方的代碼,
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寫, 不會有任何問題, 所以使用工具類時最好有一定了解, 不然可能會有一些意外問題出現.
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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 雖然...
閱讀 2395·2021-11-11 16:54
閱讀 1204·2021-09-22 15:23
閱讀 3645·2021-09-07 09:59
閱讀 1990·2021-09-02 15:41
閱讀 3283·2021-08-17 10:13
閱讀 3037·2019-08-30 15:53
閱讀 1235·2019-08-30 13:57
閱讀 1210·2019-08-29 15:16