第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

必須使用“putIfAbsent”的返回值——真的嗎?

必須使用“putIfAbsent”的返回值——真的嗎?

慕尼黑8549860 2022-07-14 10:13:32
我有一個像這樣的 ConcurrentMaps 的 ConcurrentMap ...ConcurrentMap<String, ConcurrentMap<K, V>> mapsMap = new ConcurrentHashMap<>();現(xiàn)在以某種方法,我想通過確保存在這樣的某個鍵的映射來防止 NPE... mapsMap.putIfAbsent(someKey, new ConcurrentHashMap<K, V>());......所以我可以安全地調(diào)用...... mapsMap.get(someKey).put(...);...不用擔(dān)心這里的空值?,F(xiàn)在,Sonarqube 告訴我,這違反了RSPEC-2201規(guī)則......不應(yīng)忽略來自沒有副作用的函數(shù)的返回值 [..] 以及在 ConcurrentMap.putIfAbsent 調(diào)用上忽略的返回值。這只是 SonarQube 沒有檢測到該方法的副作用對我來說已經(jīng)足夠了(并且返回值不會添加任何信息)還是我錯過了關(guān)于 putIfAbsent 合約的重要一點?
查看完整描述

2 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

如果指定的鍵尚未與值關(guān)聯(lián)(或映射到 null),則將其與給定值關(guān)聯(lián)并返回 null,否則返回當(dāng)前值。

如果不需要,您可以放心地忽略返回的值。
Sonarqube對于某些規(guī)則非常具有侵入性,因此只需禁用它并繼續(xù)您的業(yè)務(wù)。

恕我直言,該特定規(guī)則主要是針對由多個開發(fā)人員編寫代碼的項目中的常見模式設(shè)置的。


查看完整回答
反對 回復(fù) 2022-07-14
?
拉風(fēng)的咖菲貓

TA貢獻1995條經(jīng)驗 獲得超2個贊

除了@LppEdd 的正確分析器之外,這個問題也在sonarqube 論壇上得到了回答:

基本上,這條規(guī)則取自 FindBugs 的規(guī)則RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED

putIfAbsent 方法通常用于確保單個值與給定鍵相關(guān)聯(lián)(如果不存在則放置成功的第一個值)。如果忽略返回值并保留對傳入值的引用,則可能會保留與映射中的鍵不相關(guān)的值。如果您使用哪一個很重要,而您使用了未存儲在地圖中的那個,那么您的程序?qū)⑦\行不正確。

在這種情況下,我不保留對存儲值的引用,這確實是誤報。

將來,此特定規(guī)則可能會在 SonarQube 中作為單獨的規(guī)則實施,而不再作為當(dāng)前規(guī)則 (RSPEC-2201) 的一部分。


查看完整回答
反對 回復(fù) 2022-07-14
  • 2 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號