Permulaan Pendakap Ganda Java

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kami akan menunjukkan bagaimana pendakap berganda dapat digunakan untuk membuat dan menginisialisasi objek dalam satu ekspresi Java .

Kami juga akan melihat mengapa teknik ini boleh dianggap sebagai anti-corak.

2. Pendekatan Standard

Biasanya kami memulakan dan mengisi sekumpulan negara seperti berikut:

@Test public void whenInitializeSetWithoutDoubleBraces_containsElements() { Set countries = new HashSet(); countries.add("India"); countries.add("USSR"); countries.add("USA"); assertTrue(countries.contains("India")); } 

Seperti yang dapat dilihat dari contoh di atas, kami melakukan perkara berikut:

  1. Buat contoh HashSet
  2. Tambahkan negara ke HashSet
  3. Akhirnya, kami menegaskan sama ada negara ini hadir dalam HashSet

3. Menggunakan Pendakap Ganda

Walau bagaimanapun, kita sebenarnya dapat menggabungkan penciptaan dan inisialisasi dalam satu penyataan; di sinilah kita menggunakan pendakap ganda:

@Test public void whenInitializeSetWithDoubleBraces_containsElements() { Set countries = new HashSet() { { add("India"); add("USSR"); add("USA"); } }; assertTrue(countries.contains("India")); } 

Seperti yang dapat dilihat dari contoh di atas, kita adalah:

  1. Membuat kelas dalaman tanpa nama yang memperluas HashSet
  2. Menyediakan blok inisialisasi contoh yang menggunakan kaedah tambah dan menambahkan nama negara ke HashSet
  3. Akhirnya, kita dapat menegaskan sama ada negara ini hadir dalam HashSet

4. Kelebihan Menggunakan Pendakap Ganda

Terdapat beberapa kelebihan mudah menggunakan pendakap berganda:

  • Lebih sedikit baris kod berbanding cara pembuatan dan inisialisasi asli
  • Kodnya lebih mudah dibaca
  • Inisialisasi penciptaan dilakukan dalam ungkapan yang sama

5. Kelemahan Menggunakan Pendakap Ganda

Kelemahan penggunaan pendakap berganda adalah:

  • Tidak jelas, cara yang tidak diketahui umum untuk melakukan inisialisasi
  • Ia mewujudkan kelas tambahan setiap kali kami menggunakannya
  • Tidak menyokong penggunaan "operator berlian" - ciri yang diperkenalkan di Java 7
  • Tidak berfungsi sekiranya kelas yang ingin kita lanjutan ditandakan sebagai akhir
  • Menyimpan rujukan tersembunyi pada contoh lampiran, yang boleh menyebabkan kebocoran memori

Ini disebabkan oleh kelemahan ini bahawa inisialisasi pendakap ganda dianggap sebagai anti-corak.

6. Alternatif

6.1. Kaedah Kilang Aliran

Sebagai gantinya, kami dapat memanfaatkan API Java 8 Stream baru untuk memulakan Set kami :

@Test public void whenInitializeUnmodifiableSetWithDoubleBrace_containsElements() { Set countries = Stream.of("India", "USSR", "USA") .collect(collectingAndThen(toSet(), Collections::unmodifiableSet)); assertTrue(countries.contains("India")); } 

6.2. Kaedah Kilang Java 9 Collections

Java 9 juga akan membawakan sekumpulan kaedah kilang yang berguna yang memungkinkan perkara berikut:

List list = List.of("India", "USSR", "USA"); Set set = Set.of("India", "USSR", "USA"); 

Anda boleh membaca lebih lanjut mengenai perkara ini dalam artikel ini.

7. Kesimpulannya

Dalam tutorial ringkas ini, kami membincangkan penggunaan pendakap berganda bersama kelebihan dan kekurangannya.

Pelaksanaan contoh-contoh ini dapat dijumpai dalam projek GitHub - ini adalah projek berasaskan Maven, jadi mudah untuk diimport dan dijalankan sebagaimana adanya.