Фон
Есть хорошая функция, которую я использую в IOUtils a> называется «closeQuietly», который закрывает поток независимо от того, что там находится.
Например:
InputStream input = null;
try
{
...
input = connection.getInputStream();
...
}
catch(Exception e)
{
}
finally
{
IOUtils.closeQuietly(input);
}
Каким-то образом он также скрывает предупреждение в Eclipse, когда я вызываю его в блоке finally, «Утечка ресурсов:« вход »не закрыт в этом месте».
Это означает, что в приведенном выше коде такого предупреждения нет.
Проблема
Я не понимаю, как он скрывает предупреждение о себе во «внешнем мире».
Что я пробовал
Я попытался проверить это, скопировав код этой библиотеки (пример здесь), но появляется предупреждение, когда я использую его в новом классе . Это не имеет смысла...
вот пример кода, который я создал, чтобы показать, что предупреждение будет появляться в ваших собственных классах:
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:
Вопрос
Как это делается?