¿Java tiene una declaración de uso que se puede usar al abrir una sesión en hibernación?
En C # es algo como:
using (var session = new Session())
{
}
Entonces, el objeto sale del alcance y se cierra automáticamente.
                    
                        java
                                hibernate
                                using-statement
                                
                    
                    
                        mrblah
fuente
                
                fuente

usinghace. El alcance no es de por vida (yusingtampoco se trata de vida, estrictamente hablando, yaDisposeque no destruye la memoria de un objeto)using statement.using, elimina automáticamente el objeto al final de su alcance, pero no desasigna el objeto; su vida útil no termina hasta que todas sus referencias hayan desaparecido.Respuestas:
Java 7 introdujo la Gestión Automática de Bloques de Recursos que trae esta característica a la plataforma Java. Las versiones anteriores de Java no tenían nada parecido
using.Como ejemplo, puede usar cualquier variable que se implemente
java.lang.AutoCloseablede la siguiente manera:La
java.io.Closeableinterfaz de Java , implementada por secuencias, se extiende automágicamenteAutoCloseable, por lo que ya puede usar secuencias en untrybloque de la misma manera que las usaría en unusingbloque C # . Esto es equivalente a C #using.A partir de la versión 5.0, Hibernate Sessions implementa
AutoCloseabley puede cerrarse automáticamente en bloques ARM. En versiones anteriores de Hibernate Session no se implementóAutoCloseable. Por lo tanto, deberá estar en Hibernate> = 5.0 para poder usar esta función.fuente
usingsí).AutoCloseablepor lo que aún no pueden usar ARM.AutoCloseableno existía antes de Java 7, ¿verdad?Antes de Java 7 , no existía tal característica en Java (para Java 7 y versiones posteriores, consulte la respuesta de Asaph con respecto a ARM ).
Tenías que hacerlo manualmente y fue un dolor :
Y ese es solo el código cuando ni
// Great codenihooray.close()pueden lanzar excepciones.Si realmente solo desea limitar el alcance de una variable, entonces un bloque de código simple hace el trabajo:
Pero probablemente eso no es lo que quisiste decir.
fuente
// Great codelanza una excepción.horrayposible que no se haya inicializado en ese punto (arreglado ahora).Desde Java 7 lo hace: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
La sintaxis del código en la pregunta sería:
Tenga en cuenta que
Sessionnecesita implementarAutoClosableo una de sus (muchas) subinterfaces.fuente
Técnicamente:
fuente
El equivalente java más cercano es
fuente
No, Java no tiene una
usingdeclaración equivalente.fuente
A partir de ahora, no.
Sin embargo existe una propuesta de ARM para Java 7.
fuente
Si está interesado en la gestión de recursos, Project Lombok ofrece la
@Cleanupanotación. Tomado directamente de su sitio:Vainilla Java
Con Lombok
fuente
En java 8 puedes usar try. Consulte la página siguiente. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
fuente
Consulte esta lista de palabras clave de Java .
usingpalabra clave no es, por desgracia parte de la lista.usingpalabra clave C # a través de cualquier otra palabra clave como por ahora en Java.Para imitar tal
"using"comportamiento, tendrá que usar untry...catch...finallybloque, donde dispondrá de los recursos dentrofinally.fuente
usingno sea una palabra clave no significa nada. La misma función se puede implementar (¡y se implementará!) Con otra palabra clave, como mencionó @BalusC.usingno esté en la lista de palabras clave de Java significa que esta característica no está presente en el lenguaje Java. Y eso no es cierto.usingpalabra clave ni ninguna equivalencia como por ahora. ¡Gracias @Joachim Sauer! =)Los bloques ARM , del proyecto Coin , estarán en Java 7. Esta característica está destinada a brindar una funcionalidad similar a Java como .Net usando sintaxis.
fuente
Responder a la pregunta sobre la limitación del alcance de una variable, en lugar de hablar de cerrar / eliminar automáticamente las variables.
En Java, puede definir ámbitos cerrados y anónimos utilizando llaves. Es extremadamente simple.
La variable
hooraysolo está disponible en este ámbito y no fuera de él.Esto puede ser útil si tiene variables repetidas que son solo temporales.
Por ejemplo, cada uno con index. Al igual que la
itemvariable se cierra en el ciclo for (es decir, solo está disponible dentro de él), laindexvariable se cierra en el ámbito anónimo.También utilizo esto a veces si no tiene un bucle for para proporcionar el alcance de la variable, pero desea usar nombres de variable genéricos.
fuente