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.
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 brace
bakal 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 brace
initialization 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.
Double
initialization brace nggunakake nggawe kelas
njero anonim . Apa wiwitane didhelikake ing lumahing, Nanging,
Double brace
initialization 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:
- Ngurangi garis ing kode
- Nggawe lan initialization ing siji expression.
Minus:
- Nggawe kelas anonim sing didhelikake saka sampeyan.
- Kang biaya kita biaya tambahan kanggo Kayata saben-saben kita nggunakake.
- 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.
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
ArrayList
konstruktor 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
ArrayList
saka -, 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
Set
koleksi liyane, mula sampeyan kudu nggawe
List
sadurunge 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 Factory
metode output dadi koleksi
List
:
List<String> list = Collections.unmodifiableList(Stream.of("abc", "bcd", "cde").collect(toList()));
Kanggo
Set
sampeyan 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 collect
cara 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 brace
initialization 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
List
aku luwih seneng nggawe
Collections
kanthi nggabungake karo nggawe
Array.asList
ing 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).
GO TO FULL VERSION