4

リソースリーク警告を有効にして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、リソースリークの警告を無効にしたりせずに、どういうわけかこれらの警告を削除できますか?

ループで同様のことが発生しているというバグレポートをここで見つけましたが、コードにループが存在しません。

4

2 に答える 2

3
  • 「潜在的なリソース リーク...」という警告が表示されるはずです。そうでない場合は、バグを開いてください。
  • ここでの主な問題は、コンパイラが「close(..)」メソッドの動作を認識していないことです。リソースを閉じる場合と閉じない場合があります。(コンパイラは手続き間の分析を実行しないことに注意してください)
  • 「潜在的なリソース リーク」警告を無視することを選択できます。(「リソース リーク」警告は正しいことが保証されていますが、「潜在的...」警告は正しくありません)

リソース リーク分析の詳細については、http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftask- avoiding_resource_leaks.htm&cp =1_3_9_1 を参照してください。

編集:「リソースリーク」と「潜在的なリソースリーク」に関する単語

  • 報告されたすべての「リソース リーク」警告は正しいことが保証されていますが、コード ベース内のリソース リークが「すべて」であるとは限りません。
  • 「潜在的なリソースリーク」はまあ...潜在的な問題です。一部の開発者は、何かがうまくいかないことはわかっているが、どこで発生しているのかがわからない場合に、「潜在的...」警告をオンにします。このような場合、潜在的な警告が検索を絞り込むのに役立ちます。他の開発者の中には、潜在的な警告をときどき調べて、そこに実際の問題があるかどうかを確認する人もいます。

理想的には、コンパイラが完全で正しい一連の問題を提供してくれることを望みますが、それを達成するには制限があります:-)

于 2012-07-02T11:44:21.143 に答える