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

ConcurrentMap<String, ConcurrentMap<K, V>> mapsMap = new ConcurrentHashMap<>();

现在以某种方法,我想通过确保像这样的某个键存在一个映射来防止NPE ...
 mapsMap.putIfAbsent(someKey, new ConcurrentHashMap<K, V>());

...这样我就可以放心地调用...
 mapsMap.get(someKey).put(...);

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

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



这只是SonarQube不能在这里检测到该方法的副作用对我来说是足够的(并且返回值不会添加任何信息),还是我缺少关于putIfAbsent契约(Contract)的重要要点?

最佳答案



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

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

09-27 17:26