Код: Выделить всё
public OutputStream test(boolean condition) throws FileNotFoundException {
return condition ? null : new FileOutputStream("test.txt");
}
Код: Выделить всё
Resource leak: '' is never closedКод: Выделить всё
public OutputStream test() throws FileNotFoundException {
return new FileOutputStream("test.txt");
}
Это несоответствие (ошибка?) в Eclipse или я упускаю какую-то фундаментальную разницу между двумя сценариями?
В целом кажется, что Eclipse достаточно умен, чтобы понять, что когда я возвращаю Closeable из метода, можно не делать этого пусть метод закроет поток (в конце концов, какой смысл возвращать закрытый поток?). Он даже делает это правильно, когда я возвращаю результат косвенно:
Код: Выделить всё
public OutputStream test() throws FileNotFoundException {
FileOutputStream result = new FileOutputStream("test.txt");
return result;
}
Итак, неужели Eclipse просто запутался в тройной операции? Если да, то следует ли мне сообщить об этом как об ошибке?
Еще одна странная вещь:
Если я заменю FileOutputStream на ByteArrayOutputStream, предупреждение также исчезнет:
Код: Выделить всё
public OutputStream test(boolean condition) {
return condition ? null : new ByteArrayOutputStream();
}
Код: Выделить всё
CloseableПодробнее здесь: https://stackoverflow.com/questions/234 ... e-is-never
Мобильная версия