Try-con-recursos cerca de pedidos

Aliukas:

Estoy mirando ejemplos de try-con-recursos en Java y entiendo la siguiente:

try (Connection conn = DriverManager.getConnection(url, user, pwd);
     Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery(query);) {
  ...
}

Por lo tanto, el orden de cierre es:

rs.close();
stmt.close();
conn.close();

lo cual es perfecto porque tiene una conexión de una declaración y una declaración tiene un conjunto de resultados.

Sin embargo, en los siguientes ejemplos, el orden de cerca creo que es lo contrario de lo esperado:

Ejemplo 1:

try (FileReader fr = new FileReader(file);
     BufferedReader br = new BufferedReader(fr)) {
  ...
}

El orden de cierre es:

br.close();
fr.close();

Ejemplo 2:

try (FileOutputStream fos = new FileOutputStream("testSer.ser");
    ObjectOutputStream oos = new ObjectOutputStream(fs);) {
    ...
}

El orden de cierre es:

oos.close();
fos.close();

Son correctos estos ejemplos? Creo que el cierre de estos ejemplos debe ser diferente porque:

  1. En el ejemplo 1 un BufferedReader tiene una FileReader.
  2. En el ejemplo 2 un ObjectOutputStream tiene un FileOutputStream.
Aliukas:

Creo que no estaba bien cuando me dijo "tiene una conexión de una declaración y una declaración tiene un conjunto de resultados". Tal vez sea todo lo contrario "un conjunto de resultados tiene una declaración y una declaración tiene una conexión" o al menos "un conjunto de resultados fue creado por una declaración y una declaración fue creado por una conexión".

Por eso pienso:

try (Parent parent = new Parent();
     Child child = parent.createChild();) {
    ...
}

Es equivalente a:

try (Parent parent = new Parent();
     Child child = new Child(parent);) {
    ...
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189038&siteId=1
Recomendado
Clasificación