Wyjątek wychodzący z close () w try-with-resource
Czytałem o try-with-resource w JDK7 i podczas gdy myślałem o uaktualnieniu mojej aplikacji do pracy z JDK7, miałem do czynienia z tym problemem ..
Podczas używania BufferedReader na przykład zapis rzuca IOException, a close zgłasza IOException .. w bloku catch. Obawiam się o IOException rzuconym przez write .. ale nie przejmowałbym się tym, co rzuciło blisko.
Ten sam problem z połączeniami z bazą danych .. i innymi zasobami ..
Jako przykład utworzyłem zasób automatycznego zamykania:
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");
}
}
Teraz, gdy go używasz:
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());
}
}
}
jak mogę odróżnić takie wyjątki bez konieczności tworzenia opakowań dla klas takich jak BufferedReader?
W większości przypadków zamykam zasób w try / catch wewnątrz bloku finally, nie troszcząc się zbytnio o jego obsługę.