Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Duda] Uso obligatorio de la palabra reservada "final" en try-with-resources?

En la clase que se nos enseña el metodo de "try-with-resources" el profesor hace uso de la palabra "final" antes de cada recurso que nosotros deberíamos cerrar posteriormente.

Ahora, si nosotros no hacemos uso de "final" y utilizo try(nombre del recurso) obtengo el mismo resultado. La conexion se cierra igualmente, no marca error de sintaxis, ni obtengo ninguna exception.

Mi duda es: si ¿Es obligatorio o no el uso de la palabra?

Ejemplo usando "final":

final Connection con = new ConexionFactory().recuperaConexion();

        try(con){

            final PreparedStatement statement = con.prepareStatement("DELETE FROM producto WHERE id = ?");

            try(statement){
                statement.setInt(1, id);
                statement.execute();

                System.out.println("Eliminado el producto con id: " + id);

                int cantidad = statement.getUpdateCount();

                return cantidad;
            }
        }

Ejemplo sin utilizar "final":

Connection con = new ConexionFactory().recuperaConexion();

        try(con){

            PreparedStatement statement = con.prepareStatement("DELETE FROM producto WHERE id = ?");

            try(statement){
                statement.setInt(1, id);
                statement.execute();

                System.out.println("Eliminado el producto con id: " + id);

                int cantidad = statement.getUpdateCount();

                return cantidad;
            }
        }

Quizas está mal no usarla porque la conexion nunca se cierra, pero no sabría como comprobarlo

2 respuestas

Hola Nico,

Es obligatorio usar final para garantizar que la variable se inicialice correctamente, en este caso sin final no te da ni errores de compilación, ni runtime porque solo tienes una conexión, pero si tuvieras varias Java no sabria cuál debería inicializar de todas las conexiones lo que podría provocar errores de compilación, runtime y/o lógica

Hola Nicolas, un gusto saludarte.

Quizás si debe ser obligatorio la palabra reservada "final", porque permite que la variable asignada sea inmutable, es decir que su valor no cambie en el futuro y no haya congruencias en el código.

Saludos.