必须使用"putIfAbsent"的返回值 - 真的吗?

Flo*_*etz 6 java sonarqube

我有一个这样的ConcurrentMaps的ConcurrentMap ...

ConcurrentMap<String, ConcurrentMap<K, V>> mapsMap = new ConcurrentHashMap<>();
Run Code Online (Sandbox Code Playgroud)

现在在某些方法中,我想通过确保某个键的映射存在来阻止NPE ...

 mapsMap.putIfAbsent(someKey, new ConcurrentHashMap<K, V>());
Run Code Online (Sandbox Code Playgroud)

...所以我可以安全地称之为......

 mapsMap.get(someKey).put(...);
Run Code Online (Sandbox Code Playgroud)

......这里不用担心空值.

现在,Sonarqube告诉我,这违反了RSPEC-2201规则......

不应忽略没有副作用的函数的返回值[..]以及ConcurrentMap.putIfAbsent调用忽略返回值.

这只是SonarQube没有检测到方法的副作用对我来说足够了(并且返回值不会添加任何信息)或者我是否错过了关于putIfAbsent合约的重要观点?

Lpp*_*Edd 7

如果指定的键尚未与值关联(或映射为 null),则将其与给定值关联并返回 null,否则返回当前值。

如果您不需要它,您可以放心地忽略返回的值。
Sonarqube某些规则非常具有侵入性,因此只需禁用它并继续您的业务。

恕我直言,该特定规则主要是为由多个开发人员编写代码的项目中的常见模式设置的。