Я читал о try-in-resource в JDK7, и пока я думал о том, чтобы обновить мое приложение для работы с JDK7, я столкнулся с этой проблемой.
При использовании BufferedReader, например, write throws IOException и close throws IOException.. в блоке catch я заинтересован в исключении IOException, которое вы выбрали для записи. Но мне было бы все равно, если вы закроете закрытие..
Такая же проблема с подключением к базе данных.. и любой другой ресурс..
В качестве примера я создал автоматически закрытый ресурс:
public class AutoCloseableExample implements AutoCloseable {
public AutoCloseableExample() throws IOException{
throw new IOException();
}
@Override
public void close() throws IOException {
throw new IOException("An Exception During Close");
}
}
Теперь при использовании:
public class AutoCloseTest {
public static void main(String[] args) throws Exception {
try (AutoCloseableExample example = new AutoCloseableExample()) {
System.out.println(example);
throw new IOException("An Exception During Read");
} catch (Exception x) {
System.out.println(x.getMessage());
}
}
}
как я могу различать такие исключения, не создавая обертки для классов, таких как BufferedReader?
В большинстве случаев я помещаю ресурс в try/catch внутри блока finally, не заботясь о его обработке.