Код на ява 1.7 (алгоритм не важен, интересен лишь блок с автозакрытием ресурса):
private Future<IOException> startStreamPump(final InputStream errorStream) {
return executor.submit(new Callable<IOException>() {
@Override
public IOException call() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(errorStream));) {
for (; ; ) {
String line = reader.readLine();
if (line == null) {
break;
}
synchronized (log) {
log.warn(line);
}
}
return null;
} catch (IOException e) {
return e;
}
}
});
}
reader.close()
может бросать IOException
.Какой из этих вариантов будет полным аналогом без использования try with resources? Первый:
private Future<IOException> startStreamPump(final InputStream errorStream) {
return executor.submit(new Callable<IOException>() {
@Override
public IOException call() {
BufferedReader reader = new BufferedReader(new InputStreamReader(errorStream));
try {
for (; ; ) {
String line = reader.readLine();
if (line == null) {
break;
}
synchronized (log) {
log.warn(line);
}
}
return null;
} catch (IOException e) {
return e;
} finally {
try {
reader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
});
}
private Future<IOException> startStreamPump(final InputStream errorStream) {
return executor.submit(new Callable<IOException>() {
@Override
public IOException call() {
BufferedReader reader = new BufferedReader(new InputStreamReader(errorStream));
try {
for (; ; ) {
String line = reader.readLine();
if (line == null) {
break;
}
synchronized (log) {
log.warn(line);
}
}
return null;
} catch (IOException e) {
return e;
} finally {
try {
reader.close();
} catch (IOException e) {
}
}
}
});
}
throw new RuntimeException(e);
в finally
блоке. Или если оба неправильные, какой код будет полным аналогом?