2016-05-11 8 views
4

これはまだ警告を生成最も最小の例である:IntelliJのFile.listFilesを使用する場合)(警告「NullPointerExceptionが発生することがあり、」

File searchpath = new File(path); 
for(File file: searchpath.listFiles()){ ... } 

(パスは、このメソッドに渡される文字列である)

Dereference of searchPath.listFiles() may produce 'java.lang.NullPointerException'

私はちょうどVARを初期化することを考える:2行目は、forループで、IDEの警告をトリガー私のプログラムがうまくいけば、私の最初の本能は、これが駄目な警告だということです。

これは有効な警告ですか、もしそうなら、どうすればいいですか?

* EDIT1

ファイルあなたはそれをヌルのパスを与えた場合、そのJavadocのあたりに、NPEがスローされます。そのため、エラーをクリアすると、path引数に注釈を付けて、決してnullではないことが分かっているようです。

答えて

7

警告の理由は、特定の条件下でlistFiles()がnullを返すためです。ドキュメントによると、pathがディレクトリを参照していない場合、またはアクセス中にI/Oエラーが発生した場合は、nullが返されます。その可能性を防ぐために、警告を排除するために、あなたはこれを行うことができます。

File searchpath = new File(path); 
File[] files = searchpath.listFiles(); 
if(files == null){ 
    // handle path not a directory, or other error 
} else { 
    for(File file: files){ ... } 
} 

https://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles()

を参照してください。
1

IntelliJが私にこういうものを投げたときはいつも、私はそれを私の最大の利益のために見つけますが、それはtry-catchブロックにあります。

もちろん、決して失敗しないと確信していれば、ポイントがないかもしれませんが、それはプログラマとしての私たちの仕事なので、すべての考えられるエラーを常に考慮することをお勧めします。

関連する問題