¿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
using
hace. El alcance no es de por vida (yusing
tampoco se trata de vida, estrictamente hablando, yaDispose
que 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.AutoCloseable
de la siguiente manera:La
java.io.Closeable
interfaz de Java , implementada por secuencias, se extiende automágicamenteAutoCloseable
, por lo que ya puede usar secuencias en untry
bloque de la misma manera que las usaría en unusing
bloque C # . Esto es equivalente a C #using
.A partir de la versión 5.0, Hibernate Sessions implementa
AutoCloseable
y 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
using
sí).AutoCloseable
por lo que aún no pueden usar ARM.AutoCloseable
no 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 code
nihooray.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 code
lanza una excepción.horray
posible 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
Session
necesita implementarAutoClosable
o una de sus (muchas) subinterfaces.fuente
Técnicamente:
fuente
El equivalente java más cercano es
fuente
No, Java no tiene una
using
declaració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
@Cleanup
anotació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 .
using
palabra clave no es, por desgracia parte de la lista.using
palabra 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...finally
bloque, donde dispondrá de los recursos dentrofinally
.fuente
using
no sea una palabra clave no significa nada. La misma función se puede implementar (¡y se implementará!) Con otra palabra clave, como mencionó @BalusC.using
no 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.using
palabra 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
hooray
solo 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
item
variable se cierra en el ciclo for (es decir, solo está disponible dentro de él), laindex
variable 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