「putIfAbsent」の戻り値が使用されなければならない - 本当に?

フロリアンSchaetz:

私はこのような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 ...

副作用のない関数からの戻り値は、[..]は無視してもConcurrentMap.putIfAbsentに無視され、戻り値を呼び出すべきではありません。

これだけSonarQubeは、メソッドの副作用がここに私のために十分であることを検出していません(と戻り値は、任意の情報を追加しません)または私はputIfAbsent契約に関する重要なポイントをしないのですか?

LppEdd:

指定されたキーは、既に値と関連付けられていない(またはnullにマッピングされている)場合、与えられた値を返すヌルに関連付け、他のリターン電流値。

あなたがそれを必要としない場合は、安全に、戻り値を無視することができます。
Sonarqubeそうちょうどそれを無効にし、あなたのビジネスに上に行く、一定のルールにかなり侵襲的です。

私見、特定のルールは、ほとんどのコードは、複数の開発者によって書かれたプロジェクトに共通のパターンに設定されていること。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=172919&siteId=1