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.
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é.
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.
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.
Techniquement:
DisposableObject d = null;
try {
d = new DisposableObject();
}
finally {
if (d != null) {
d.Dispose();
}
}
L'équivalent java le plus proche est
AwesomeClass hooray = new AwesomeClass();
try{
// Great code
} finally {
hooray.dispose(); // or .close(), etc.
}
Non, Java n'a pas d'équivalent d'instruction using
.