バックグラウンド
「closeQuietly」と呼ばれるIOUtilsで使用する素晴らしい関数があり、そこに何が入っていてもストリームを閉じます。
例えば:
InputStream input = null;
try
{
...
input = connection.getInputStream();
...
}
catch(Exception e)
{
}
finally
{
IOUtils.closeQuietly(input);
}
どういうわけか、「リソースリーク:「入力」はこの場所で閉じられていません」という最終ブロックで呼び出すと、Eclipseの警告も非表示になります。
これは、上記のコードでは、そのような警告がないことを意味します。
問題
それ自体の「外の世界」に関する警告をどのように隠しているのかわかりません。
私が試したこと
このライブラリのコードをコピーして確認しようとしましたが (例はこちら)、新しいクラスで使用すると警告が表示されます。意味がありません...
独自のクラスで警告が発生することを示すために作成したサンプル コードを次に示します。
public class MyIOUtils {
public static void closeQuietly(final InputStream input) {
if (input == null)
return;
try {
input.close();
} catch (final IOException ioe) {
}
}
public static void closeQuietly(final OutputStream output) {
if (output == null)
return;
try {
output.close();
} catch (final IOException ioe) {
}
}
}
利用方法:
public class Test {
public void test() {
InputStream inputStream = null;
try {
inputStream = new FileInputStream("dummyFile.txt");
int t = 0;
--t;
if (t < 0)
return; // here you will get a warning
} catch (final FileNotFoundException e) {
} finally {
MyIOUtils.closeQuietly(inputStream);
}
}
}
インストールされているEclipseのバージョンを含めて、私が見ているものは次のとおりです。
質問
それはどのように行うのですか?