リソースリーク警告を有効にしてEclipse4.2を使用しています。
このコードは、私の意見では、リソースリークの警告を生成します。
public static void test(){
InputStream in = null;
try {
in = new FileInputStream("A");
} catch (IOException e) {
return;
}finally{
close(in);
}
}
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
コードをリファクタリングし、closeメソッドをfinallyブロックにプルすると、すべて問題ありません。
public static void test2(){
InputStream in = null;
try {
in = new FileInputStream("A");
} catch (IOException e) {
return;
}finally{
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
メソッドのコードを複製したりclose
、リソースリークの警告を無効にしたりせずに、どういうわけかこれらの警告を削除できますか?
ループで同様のことが発生しているというバグレポートをここで見つけましたが、コードにループが存在しません。