JavaRush /Blog Jawa /Random-JV /Inisialisasi brace dobel
Joysi
tingkat

Inisialisasi brace dobel

Diterbitake ing grup

1. initialization nahan pindho

Initialization nggunakake double braces ( sabanjuré diarani Double brace initialization ) minangka alat Jawa kanggo nggawe koleksi kayata dhaftar, nyetel lan peta bebarengan karo deklarasi.
Inisialisasi brace dobel - 1
Yen sampeyan butuh dhaptar kanthi unsur tetep, kayata dhaptar produk utawa mata uang sing didhukung, nyatakake dhaptar kasebut bebarengan karo wiwitan, nambah keterbacaan kode. Iki kok initialization Double brace entuk popularitas, amarga ora ana cara standar liyane kanggo nggawe koleksi karo initialization simultaneous ing kode. Sayange, ora kaya basa pamrograman liyane, Jawa ora ndhukung koleksi literal. Amarga watesan iki, nggawe dhaptar sing ora bisa diowahi sanajan sawetara unsur meksa kita nulis akeh baris kode ing wangun telpon bola-bali add()kanggo nambah unsur sing dikarepake kanthi bungkus pungkasan:
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(3);
list.add(5);
list.add(7);
List<Integer> unmodifiableList = Collections.unmodifiableList(list);
Iki minangka katrangan sing ora perlu sing bisa disederhanakake. Ayo ngisi dhaptar statis kanthi cara sing trep kanggo kita, yaiku langsung ing blok statis sajrone initialization, yaiku apa sing Double bracebakal dibantu dening initialization, ngidini kita nulis kabeh ing siji baris:
List<Integer> list = Collections.unmodifiableList(new ArrayList<Integer>() {{
        add(2);
        add(3);
        add(5);
}});
Kajaba iku, Double braceinitialization bakal mbantu kita ngisi nilai lan HashMap:
Map<Integer, String> intToString = new HashMap<Integer, String>(){{
         put(1, "one");
         put(2, "two");
         put(3, "three");
 }};
Kabeh katon elegan, nanging nduweni kekurangan, sing nggawe initialization Double brace minangka anti-pola. Kita bakal nliti luwih lanjut ing bab sabanjure.

Pros lan cons saka Double brace initialization.

Doubleinitialization brace nggunakake nggawe kelas njero anonim . Apa wiwitane didhelikake ing lumahing, Nanging, Double braceinitialization nggawe kelas karo initialization luwih saka contone saben-saben sampeyan nggunakake. Kajaba iku, referensi sing didhelikake kanggo kelas pribadi iki digunakake, sing bisa nyebabake bocor memori. Sampeyan uga ora bisa nggunakake operator hantu kanggo generik (operator inten <>), amarga kita ora bisa ngakses nang kelas anonim.
(Saka penerjemah: Sawise maneh kanthi luwih rinci:
sawise pisanan {, kelas anonim internal digawe, sawise sing kapindho, {initialization dumadi nalika nggawe conto kelas, ing ngendi kita duwe akses menyang lapangan lan metode eksternal ( relatif marang kelas anonim).
Kaluwihan:
  1. Ngurangi garis ing kode
  2. Nggawe lan initialization ing siji expression.
Minus:
  1. Nggawe kelas anonim sing didhelikake saka sampeyan.
  2. Kang biaya kita biaya tambahan kanggo Kayata saben-saben kita nggunakake.
  3. Saben referensi sing didhelikake digawe, sing bisa nyebabake bocor memori.
Putusan: Amarga kontra ing ndhuwur lan ana alternatif kanggo Double brace, initialization dianggep minangka anti-pola ing donya Jawa. Simpen anak kucing

Alternatif kanggo initialization Double brace ing Jawa

Kabar sing apik yaiku ana cara liya kanggo nggayuh tujuan sing padha ing Jawa. Kita bisa ngleksanakake ing siji baris kode nggawe lan initialization saka ArrayList nggunakake Copy constructor saka kelas Koleksi minangka kapacak ing ngisor iki:
List<Integer> list = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(2, 3, 5)));
Arrays.asList()bakal bali kita dhaftar dawa tetep liwati kanggo ArrayListkonstruktor salinan. Tetep wonten ing pikiran prabédan antarane dhaftar tetep-dawa bali saka Arrays.asList()lan Collections.unmodifiableList(): sampeyan ora bisa nambah utawa mbusak unsur ArrayListsaka -, nanging sampeyan bisa ngganti unsur dening indeks nggunakake set(), sing ora bisa nindakake karo dhaftar bali dening Collections.unmodifiableList(). Yen sampeyan pengin entuk dhaptar cilik, iki minangka cara sing paling apik, sanajan bakal kurang transparan kanggo Setkoleksi liyane, mula sampeyan kudu nggawe Listsadurunge nggawe Set-a. Nanging iki isih luwih apik tinimbang initialization Double brace, wiwit ing kasus iki kelas anonim ekstra internal ora digawe saben-saben digunakake. Yen sampeyan mbukak Java 8 sampeyan duwe cara alternatif liyane. JDK 8 Stream API bakal mbantu sampeyan nggawe koleksi cilik kanthi nggabungake Stream Factorymetode output dadi koleksi List:
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
Kanggo Setsampeyan bisa nggunakake Collectors.toSet()cara tinimbang Collectors.toList()ing ngisor iki:
Set<String> set = Collections.unmodifiableSet(Stream.of("abc", "bcd", "cde").collect(toSet()));
Miturut cara, Stream collectcara ora njamin manawa koleksi sing digawe bakal dilindhungi saka owah-owahan. Ing Jawa 8, koleksi sing bali (kayata - ArrayList, HashSet, lan HashMap) cukup umum (kita bisa ngganti), nanging kasunyatan iki bisa didandani ing rilis JDK mbesuk. Iku kabeh kanggo saiki babagan Double braceinitialization ing Jawa. Cithakan iki bisa ditampa kanggo tes lan demo, nanging ora cukup apik kanggo panggunaan produksi. Amarga kekurangan sing ana, initialization dobel brace wis dadi anti-pola saiki, utamane diwenehi alternatif sing kasedhiya. Aku dhewe isih nggunakake construction iki kanggo initialize peta statis lan iku. Kanggo Listaku luwih seneng nggawe Collectionskanthi nggabungake karo nggawe Array.asListing konstruktor. Lan yen aku nggunakake Jawa 8 - desain nggunakake Stream API lan collect(). Artikel sing Gegandhengan: Yen sampeyan seneng karo tutorial iki lan pengin sinau luwih lengkap babagan pola pemrograman Java, prinsip, lan praktik paling apik, sampeyan bisa uga pengin mriksa artikel liyane ing situs kita . Wacan sing Disaranake: Yen sampeyan pengin sinau luwih lengkap babagan pola lan praktik paling apik sampeyan kudu maca Pemrograman Efektif dening Joshua Bloch , ora ana buku sing bisa njupuk Panggonan. Lan yen sampeyan wis pinter basa Jawa lan nggoleki buku babagan pola desain, gaya penyajian humor sing menarik lan gampang diwaca, perhatikan "Head First. Pola Desain " .
Saka penerjemah: Aku sengaja menehi link menyang buku asli Bloch, amarga terjemahan menyang basa Rusia ora kasil (contone, Builder = constructor).
Terjemahan artikel Apa Dobel Brace Initialization ing Jawa? Tuladha Anti Pola (diterbitake Oktober 2015).
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION