Java a-t-il une instruction using qui peut être utilisée lors de l'ouverture d'une session en veille prolongée?
En C #, c'est quelque chose comme:
using (var session = new Session())
{
}
Ainsi, l'objet sort de sa portée et se ferme automatiquement.
java
hibernate
using-statement
mrblah
la source
la source
using
fait. La portée n'est pas à vie (etusing
ne concerne pas non plus la durée de vie, à proprement parler, carDispose
ne détruit pas la mémoire d'un objet.)using statement
.using
, automatiquement dispose l'objet à la fin de son champ d' application, mais il n'a pas liberer l'objet - sa durée de vie est pas terminée jusqu'à ce que toutes ses références ont disparu.Réponses:
Java 7 a introduit la gestion automatique des blocs de ressources qui apporte cette fonctionnalité à la plate-forme Java. Les versions précédentes de Java n'avaient rien de semblable
using
.À titre d'exemple, vous pouvez utiliser n'importe quelle variable implémentée
java.lang.AutoCloseable
de la manière suivante:L'
java.io.Closeable
interface de Java , implémentée par des flux, s'étend automatiquementAutoCloseable
, de sorte que vous pouvez déjà utiliser les flux dans untry
bloc de la même manière que vous les utiliseriez dans unusing
bloc C # . Ceci est équivalent à C #using
.Depuis la version 5.0, les sessions Hibernate sont implémentées
AutoCloseable
et peuvent être fermées automatiquement dans les blocs ARM. Dans les versions précédentes de Hibernate Session ne mettait pas en œuvreAutoCloseable
. Vous devrez donc être sur Hibernate> = 5.0 pour utiliser cette fonctionnalité.la source
using
fait).AutoCloseable
et ne peuvent donc pas encore utiliser ARM.AutoCloseable
n'existait pas avant java 7 l'a-t-il fait?Avant Java 7 , une telle fonctionnalité n'existait pas en Java (pour Java 7 et plus, voir la réponse d' Asaph concernant ARM ).
Vous deviez le faire manuellement et c'était pénible :
Et c'est juste le code quand ni
// Great code
nihooray.close()
ne peut lever d'exceptions.Si vous voulez vraiment limiter la portée d'une variable, un simple bloc de code fait le travail:
Mais ce n'est probablement pas ce que vous vouliez dire.
la source
// Great code
lève une exception.horray
peut qu'il n'ait pas été initialisé à ce stade (corrigé maintenant).Depuis Java 7, il fait: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
La syntaxe du code de la question serait:
Notez qu'il
Session
faut implémenterAutoClosable
ou l'une de ses (nombreuses) sous-interfaces.la source
Techniquement:
la source
L'équivalent java le plus proche est
la source
Non, Java n'a pas d'
using
équivalent d'instruction.la source
A partir de maintenant, non.
Cependant, il existe une proposition d' ARM pour Java 7.
la source
Si vous êtes intéressé par la gestion des ressources, Project Lombok propose l'
@Cleanup
annotation. Tiré directement de leur site:Vanille Java
Avec Lombok
la source
Dans java 8, vous pouvez utiliser try. Veuillez vous référer à la page suivante. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
la source
Veuillez consulter cette liste de mots-clés Java .
using
mot-clé ne fait malheureusement pas partie de la liste.using
mot-clé C # avec un autre mot-clé comme pour l'instant en Java.Pour imiter un tel
"using"
comportement, vous devrez utiliser untry...catch...finally
bloc dans lequel vous disposerez des ressources qu'il contientfinally
.la source
using
ne soit pas un mot-clé ne veut rien dire. La même fonctionnalité peut être (et sera!) Implémentée avec un autre mot-clé, comme @BalusC l'a mentionné.using
ne soit pas dans la liste des mots-clés Java signifie que cette fonctionnalité n'est pas présente dans le langage Java. Et ce n'est pas vrai.using
mot-clé, ni aucune équivalence comme pour l'instant. Merci @Joachim Sauer! =)Les blocs ARM , de la pièce du projet, seront en Java 7. Cette fonctionnalité est destinée à apporter à Java des fonctionnalités similaires à celles du .Net en utilisant la syntaxe.
la source
Pour répondre à la question concernant la limitation de la portée d'une variable, au lieu de parler de la fermeture / suppression automatique des variables.
En Java, vous pouvez définir des étendues fermées et anonymes en utilisant des accolades. C'est extrêmement simple.
La variable
hooray
n'est disponible que dans cette étendue, et non en dehors.Cela peut être utile si vous avez des variables répétitives qui ne sont que temporaires.
Par exemple, chacun avec index. Tout comme la
item
variable est fermée sur la boucle for (c'est-à-dire qu'elle n'est disponible qu'à l'intérieur), laindex
variable est fermée sur la portée anonyme.J'utilise également cela parfois si vous n'avez pas de boucle for pour fournir une portée de variable, mais que vous souhaitez utiliser des noms de variables génériques.
la source