2017-07-11 1 views
1

可能なヌルポインタ参照エラーの可能性ヌルポインタ参照を示していますSonarQubeは、このコードで

if(!Util.isNull(dir)){ 
    if (dir.isDirectory()){ 
     if(!Util.isNull(dir.list())) 
      if((!Util.isNull(dir.list().length))) // issue reported here 
       if(dir.list().length == 0) // another issue reported here 
        if (dir.delete()) 
         LOGGER.info("deleted:"); 
        } 
       } 

は、どのように私はこれらの問題を解決することができますか?

+0

[SONARでnullポインタの逆参照が可能](https://stackoverflow.com/questions/37295215/possible-null-pointer-dereference-in-sonar) – gile

+0

Sonarは他のファイルのUtil.isNullを知っています私のアプリケーション – vk1

+3

'dir'が' File'であると仮定すると、 'dir.list()。length'は決してヌルではなく、' int'です。同様に、 'dir.isDirectory()'の場合、 'dir.list()'はnullではありません。 –

答えて

4

あなたは、dir.list()がnullではないことを確認します。その後、dir.list()への他の呼び出しを行い、この場合はnullにはなれません。

SonarJavaは、dir.list()が最初にヌルになっていなくても、2番目または3番目のコールでnullになっている可能性があることを伝えます。この問題を解決するために

  1. これは、としても知られている変数

を使用する変数は

  • nullではないことを、変数
  • チェックにdir.list()の結果を保存します変数のリファクタリングを抽出し、さらに良い効果があります。 dir.list()の結果がコール間で変更されることを期待しない場合、プログラムはディレクトリの内容を生成するためにファイルシステムに再度アクセスする必要がないので、パフォーマンスも向上します。

  • +0

    あなたのソリューションは動作します! – vk1

    +0

    @ vk1 Cool!ご意見ありがとうございます!それを「承認済み」(緑色のチェックマーク)としてマークしてください。これは2つの評判ポイント(ええ)と私に15の評判ポイント(ええ!)を与え、すぐに他のすべての読者にあなたの問題を解決したことを示します。その後、あなたのコメントを削除することもできます(それは時代遅れになるでしょう)。 – slartidan

    関連する問題