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.
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.
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.
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.
Tecnicamente:
DisposableObject d = null;
try {
d = new DisposableObject();
}
finally {
if (d != null) {
d.Dispose();
}
}
O equivalente java mais próximo é
AwesomeClass hooray = new AwesomeClass();
try{
// Great code
} finally {
hooray.dispose(); // or .close(), etc.
}
No, Java has no using
statement equivalent.