Java tem uma declaração de uso?

o Java tem uma declaração de utilização que pode ser usada ao abrir uma sessão em hibernado?

Em C# é algo como:

using (var session = new Session())
{


}
Então o objeto sai do escopo e fecha automaticamente.

Author: Asaph, 0000-00-00

6 answers

Java 7 introduziu a gestão automática do bloco de recursos , o que traz esta funcionalidade para a plataforma Java. Versões anteriores de Java não tinham nada parecido com using.

Como exemplo, pode usar qualquer variável de implementação java.lang.AutoCloseable da seguinte forma:

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

De Java java.io.Closeable, implementada pelos fluxos, estende-se automaticamente AutoCloseable, por isso já pode usar os fluxos num bloco try da mesma forma que os usaria num bloco C# using. Isto é ... equivalente a c#'s using.

A partir de versão 5.0, as sessões hibernadas implementam AutoCloseable e pode ser auto-fechado em blocos de braço. Nas versões anteriores da sessão Hibernate não foi implementado AutoCloseable. Então você precisa estar em hibernado >= 5.0 para usar este recurso.

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

Antes de Java 7 , havia No tal recurso em Java (para Java 7 e up veja resposta de Asaph em relação a braço .

Precisava de o fazer manualmente e foi uma dor.:
AwesomeClass hooray = null;
try {
  hooray = new AwesomeClass();
  // Great code
} finally {
  if (hooray!=null) {
    hooray.close();
  }
}
E esse é o código em que nem // Great code nem {3]} podem abrir excepções.

Se você realmente {[7] } só quer limitar o âmbito de uma variável, então um simples bloco de código faz o trabalho:

{
  AwesomeClass hooray = new AwesomeClass();
  // Great code
}
Mas isso é provavelmente não foi o que quis dizer.
 25
Author: Joachim Sauer, 2017-09-08 09:43:21

Desde Java 7 que faz: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec

A sintaxe para o código na pergunta seria:

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

Note que Session necessita de implementar AutoClosable ou uma das suas (muitas) sub-interfaces.

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

Tecnicamente:

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

O equivalente java mais próximo é

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

No, Java has no using statement equivalent.

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