Verfügt Java über eine using-Anweisung, die beim Öffnen einer Sitzung im Ruhezustand verwendet werden kann?
In C # ist es so etwas wie:
using (var session = new Session())
{
}
Das Objekt verlässt also den Gültigkeitsbereich und wird automatisch geschlossen.
java
hibernate
using-statement
mrblah
quelle
quelle
using
. Der Umfang ist nicht lebenslang (undusing
streng genommen auch nicht lebenslang, da erDispose
das Gedächtnis eines Objekts nicht zerstört.)using statement
.using
es automatisch verfügt das Objekt am Ende ihres Umfangs, aber nicht freigeben das Objekt - seine Lebenszeit nicht zu Ende ist , bis alle seine Referenzen sind verschwunden.Antworten:
Java 7 führte die automatische Ressourcenblockverwaltung ein, die diese Funktion auf die Java-Plattform bringt. Frühere Versionen von Java hatten nichts Ähnliches
using
.Als Beispiel können Sie jede Variable verwenden,
java.lang.AutoCloseable
die folgendermaßen implementiert wird:Die
java.io.Closeable
von Streams implementierte Java- Schnittstelle wird automatisch erweitertAutoCloseable
, sodass Sie Streams in einemtry
Block bereits so verwenden können, wie Sie sie in einem C #using
-Block verwenden würden. Dies entspricht C #using
.Ab Version 5.0 werden Hibernate Sessions implementiert
AutoCloseable
und können in ARM-Blöcken automatisch geschlossen werden. In früheren Versionen von Hibernate Session wurde nicht implementiertAutoCloseable
. Sie müssen sich also im Ruhezustand> = 5.0 befinden, um diese Funktion nutzen zu können.quelle
using
tun).AutoCloseable
sodass sie ARM noch nicht verwenden können.AutoCloseable
existierte nicht vor Java 7, oder?Vor Java 7 gab es in Java keine solche Funktion (für Java 7 und höher siehe Asaphs Antwort zu ARM ).
Sie mussten es manuell tun und es war ein Schmerz :
Und das ist nur der Code, wenn weder
// Great code
nochhooray.close()
Ausnahmen ausgelöst werden können.Wenn Sie wirklich nur den Umfang einer Variablen einschränken möchten, erledigt ein einfacher Codeblock die Aufgabe:
Aber das haben Sie wahrscheinlich nicht gemeint.
quelle
// Great code
eine Ausnahme ausgelöst wird.horray
es zu diesem Zeitpunkt möglicherweise nicht initialisiert wurde (jetzt behoben).Seit Java 7 funktioniert dies: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
Die Syntax für den Code in der Frage wäre:
Beachten Sie, dass
Session
eineAutoClosable
oder viele seiner (vielen) Subschnittstellen implementiert werden muss.quelle
Technisch:
quelle
Das nächste Java-Äquivalent ist
quelle
Nein, Java hat kein
using
Anweisungsäquivalent.quelle
Ab sofort nein.
Es gibt jedoch einen Vorschlag von ARM für Java 7.
quelle
Wenn Sie sich für Ressourcenmanagement interessieren, bietet Project Lombok die
@Cleanup
Anmerkung an. Direkt von ihrer Website genommen:Vanille Java
Mit Lombok
quelle
In Java 8 können Sie try verwenden. Bitte beachten Sie die folgende Seite. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
quelle
Bitte beachten Sie diese Liste der Java-Schlüsselwörter .
using
Schlüsselwort ist leider nicht Teil der Liste.using
-Schlüsselworts durch ein anderes Schlüsselwort wie derzeit in Java.Um ein solches
"using"
Verhalten nachzuahmen , müssen Sie einentry...catch...finally
Block verwenden, in dem Sie die darin enthaltenen Ressourcen entsorgen würdenfinally
.quelle
using
es sich nicht um ein Schlüsselwort handelt, bedeutet nichts. Dieselbe Funktion kann (und wird!) Mit einem anderen Schlüsselwort implementiert werden, wie @BalusC erwähnt.using
nicht in der Liste der Java-Schlüsselwörter enthalten ist, bedeutet, dass diese Funktion in der Java-Sprache nicht vorhanden ist. Und das stimmt nicht.using
Schlüsselwort und auch keine Äquivalenz gibt. Danke @Joachim Sauer! =)ARM-Blöcke aus der Projektmünze befinden sich in Java 7. Diese Funktion soll Java ähnliche Funktionen bieten wie das .NET unter Verwendung der Syntax.
quelle
Beantwortung der Frage zur Einschränkung des Gültigkeitsbereichs einer Variablen, anstatt über das automatische Schließen / Entsorgen von Variablen zu sprechen.
In Java können Sie geschlossene, anonyme Bereiche in geschweiften Klammern definieren. Es ist sehr einfach.
Die Variable
hooray
ist nur in diesem Bereich verfügbar und nicht außerhalb.Dies kann nützlich sein, wenn Sie sich wiederholende Variablen haben, die nur vorübergehend sind.
Zum Beispiel jeweils mit Index. So wie die
item
Variable über die for-Schleife geschlossen wird (dh nur innerhalb dieser Schleife verfügbar ist), wird dieindex
Variable über den anonymen Bereich geschlossen.Ich verwende dies manchmal auch, wenn Sie keine for-Schleife haben, um den Variablenbereich bereitzustellen, aber generische Variablennamen verwenden möchten.
quelle