Java ont une instruction d'utilisation?


Java a-t-il une instruction using qui peut être utilisée lors de l'ouverture d'une session dans hibernate?

En C# c'est quelque chose comme:

using (var session = new Session())
{


}

Donc l'objet sort de la portée et se ferme automatiquement.

Author: Asaph, 0000-00-00

6 answers

Java 7 a introduit La gestion automatique des blocs de ressources qui apporte cette fonctionnalité à la plate-forme Java. Les versions antérieures de Java n'avaient rien qui ressemble à using.

Par exemple, vous pouvez utiliser n'importe quelle variable implémentant java.lang.AutoCloseable de la manière suivante:

try(ClassImplementingAutoCloseable obj = new ClassImplementingAutoCloseable())
{
    ...
}

L'interface java.io.Closeable de Java, implémentée par streams, étend automagiquement AutoCloseable, de sorte que vous pouvez déjà utiliser des streams dans un bloc try de la même manière que vous les utiliseriez dans un bloc C# using. C'est l'équivalent de C # ' s using.

À partir de version 5.0, les sessions Hibernate implémentent AutoCloseable et peut être auto-fermé dans les blocs de BRAS. Dans les versions précédentes de Hibernate Session n'a pas implémenté AutoCloseable. Vous devrez donc être sur Hibernate > = 5.0 pour utiliser cette fonctionnalité.

 93
Author: Asaph, 2016-06-03 15:26:38

Avant Java 7, il n'y avait non telle fonction en Java (Java 7 et voir Asaph's réponse concernant BRAS).

Vous deviez le faire manuellement et il était une douleur:

AwesomeClass hooray = null;
try {
  hooray = new AwesomeClass();
  // Great code
} finally {
  if (hooray!=null) {
    hooray.close();
  }
}

Et c'est juste le code quand ni // Great code ni hooray.close() peut lancer des exceptions.

Si vous vraiment voulez seulement limiter la portée d'une variable, alors un simple bloc de code fait le travail:

{
  AwesomeClass hooray = new AwesomeClass();
  // Great code
}

Mais ce n'est probablement pas quoi que vous vouliez dire.

 25
Author: Joachim Sauer, 2017-09-08 09:43:21

Depuis Java 7, il le fait: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec

La syntaxe du code dans la question serait:

try (Session session = new Session())
{
  // do stuff
}

Notez que Session doit implémenter AutoClosable ou l'une de ses (nombreuses) sous-interfaces.

 15
Author: riwi, 2011-08-24 08:31:34

Techniquement:

DisposableObject d = null;
try {
    d = new DisposableObject(); 
}
finally {
    if (d != null) {
        d.Dispose();
    }
}
 8
Author: ChaosPandion, 2010-01-06 21:18:13

L'équivalent java le plus proche est

AwesomeClass hooray = new AwesomeClass();
try{
    // Great code
} finally {
    hooray.dispose(); // or .close(), etc.
}
 8
Author: Michael Borgwardt, 2010-05-31 12:40:30

Non, Java n'a pas d'équivalent d'instruction using.

 3
Author: Rich Adams, 2010-01-06 21:18:03