2011-07-13 13 views
5

En la nueva sintaxis Try-with-Resources en Java 7, ¿debo preocuparme por el orden de los recursos?¿Probar con recursos en Java 7?

try (InputStream in = loadInput(...); // <--- can these be in any order? 
    OutputStream out = createOutput(...)){ 
    copy(in, out); 
} 
catch (Exception e) { 
    // Problem reading and writing streams. 
    // Or problem opening one of them. 
    // If compound error closing streams occurs, it will be recorded on this exception 
    // as a "suppressedException". 
} 
+1

Si los recursos dependen uno del otro *, sí (bueno, "tal vez" depende sobre cómo lo hacen). De otra manera no. –

Respuesta

7

El pedido es importante si, y solo si, importa cuando se utiliza la sintaxis try {create resources} finally {close resources} normal. Los recursos que fueron adquiridos primero serán cerrados el último. Ver the technotes para más detalles.

0

En realidad, el orden no importa en absoluto. Idealmente, si los recursos no están relacionados, puede abrirlos en cualquier orden y se pueden cerrar en cualquier orden.

Si los recursos están relacionados, TIENE que seguir el orden para crearlos, por ejemplo primero cree Connection y luego PreparedStatement, no tengo ninguna prueba pero creo que java cierra los recursos en orden FIFO para evitar cualquier problema de dependencias.

0

Importa si la apertura de un recurso depende de que se abra otro recurso. Por ejemplo, si la apertura de B requiere que A se abra, obviamente querrás que A se abra primero. Otra cosa que llama la atención es que los recursos se cierran en el orden opuesto al que se abren. Por ejemplo, si abre A y luego B, cuando try-with-resources los cierra, B se cierra primero seguido de A.