Apakah Java memiliki pernyataan using yang dapat digunakan saat membuka sesi dalam mode hibernasi?
Di C # itu seperti:
using (var session = new Session())
{
}
Jadi objek keluar dari ruang lingkup dan menutup secara otomatis.
java
hibernate
using-statement
mrblah
sumber
sumber
using
dilakukannya. Cakupan bukanlah seumur hidup (danusing
juga bukan tentang seumur hidup, tegasnya, karenaDispose
tidak menghancurkan memori objek.)using statement
.using
, secara otomatis membuang objek di akhir cakupannya, tetapi tidak membatalkan alokasi objek - masa pakainya belum berakhir hingga semua referensinya menghilang.Jawaban:
Java 7 memperkenalkan Manajemen Blok Sumber Daya Otomatis yang menghadirkan fitur ini ke platform Java. Versi Java sebelumnya tidak memiliki sesuatu yang mirip
using
.Sebagai contoh, Anda dapat menggunakan penerapan variabel apa pun
java.lang.AutoCloseable
dengan cara berikut:java.io.Closeable
Antarmuka Java , yang diimplementasikan oleh aliran, secara otomatis meluasAutoCloseable
, sehingga Anda sudah dapat menggunakan aliran ditry
blok dengan cara yang sama seperti Anda menggunakannya diusing
blok C # . Ini sama dengan C #using
.Mulai versi 5.0, Sesi Hibernasi diimplementasikan
AutoCloseable
dan dapat ditutup secara otomatis di blok ARM. Dalam versi sebelumnya dari SesiAutoCloseable
Hibernasi tidak diterapkan . Jadi Anda harus menggunakan mode Hibernate> = 5.0 untuk menggunakan fitur ini.sumber
using
itu).AutoCloseable
sehingga mereka belum bisa menggunakan ARM.AutoCloseable
tidak ada sebelum java 7 kan?Sebelum Java 7 , tidak ada fitur seperti itu di Java (untuk Java 7 ke atas lihat jawaban Asaph tentang ARM ).
Anda perlu melakukannya secara manual dan itu menyakitkan :
Dan itu hanya kode ketika tidak
// Great code
jugahooray.close()
dapat membuang pengecualian apapun.Jika Anda benar-benar hanya ingin membatasi ruang lingkup variabel, blok kode sederhana dapat digunakan:
Tapi mungkin bukan itu yang Anda maksud.
sumber
// Great code
melontarkan pengecualian.horray
mungkin belum diinisialisasi pada saat itu (diperbaiki sekarang).Sejak Java 7 ia melakukannya: http://blogs.oracle.com/darcy/entry/project_coin_updated_arm_spec
Sintaks untuk kode dalam pertanyaan tersebut adalah:
Perhatikan bahwa
Session
perlu mengimplementasikanAutoClosable
atau salah satu dari (banyak) sub-interfacenya.sumber
Secara teknis:
sumber
Padanan java terdekat adalah
sumber
Tidak, Java tidak memiliki
using
padanan pernyataan.sumber
Sampai sekarang, tidak.
Namun ada usulan ARM untuk Java 7.
sumber
Jika Anda tertarik dengan pengelolaan sumber daya, Project Lombok menawarkan
@Cleanup
anotasi. Diambil langsung dari situs mereka:Vanilla Java
Dengan Lombok
sumber
Di java 8 Anda bisa menggunakan try. Silakan lihat halaman berikut. http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html
sumber
Silakan lihat Daftar Kata Kunci Java ini .
using
kata kunci sayangnya bukan bagian dari daftar.using
kata kunci C # melalui kata kunci lain seperti untuk sekarang di Java.Untuk meniru
"using"
perilaku tersebut, Anda harus menggunakantry...catch...finally
blok, tempat Anda akan membuang sumber daya di dalamnyafinally
.sumber
using
bukan kata kunci tidak berarti apa-apa. Fitur yang sama dapat (dan akan!) Diimplementasikan dengan kata kunci lain, seperti yang disebutkan @BalusC.using
tidak ada dalam daftar kata kunci Java berarti fitur ini tidak ada dalam bahasa Java. Dan itu tidak benar.using
kata kunci, dan juga tidak ada kesetaraan seperti untuk saat ini. Terima kasih @Joachim Sauer! =)Blok ARM , dari koin proyek akan ada di Java 7. Fitur ini dimaksudkan untuk membawa fungsionalitas yang mirip ke Java sebagai .Net menggunakan sintaks.
sumber
Untuk menjawab pertanyaan tentang membatasi ruang lingkup variabel, daripada berbicara tentang menutup / membuang variabel secara otomatis.
Di Java, Anda dapat menentukan cakupan anonim dan tertutup menggunakan tanda kurung kurawal. Ini sangat sederhana.
Variabel
hooray
hanya tersedia dalam cakupan ini, bukan di luarnya.Ini dapat berguna jika Anda memiliki variabel berulang yang hanya bersifat sementara.
Misalnya, masing-masing dengan index. Sama seperti
item
variabel ditutup di atas loop for (yaitu, hanya tersedia di dalamnya),index
variabel ditutup di atas ruang lingkup anonim.Saya juga menggunakan ini kadang-kadang jika Anda tidak memiliki loop for untuk menyediakan lingkup variabel, tetapi Anda ingin menggunakan nama variabel generik.
sumber