Inicializácia Java Double Brace

1. Prehľad

V tomto rýchlom výučbe si ukážeme, ako sa dajú použiť dvojité zátvorky vytváranie a inicializácia objektov v jednom výraze Java.

Pozrime sa tiež na to, prečo možno túto techniku ​​považovať za anti-vzor.

2. Štandardný prístup

Za normálnych okolností inicializujeme a osídľujeme súbor krajín nasledovne:

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

Ako je zrejmé z vyššie uvedeného príkladu, robíme nasledujúce:

  1. Vytvorte inštanciu HashSet
  2. Pridajte krajiny do HashSet
  3. Na záver tvrdíme, či je krajina prítomná v HashSet

3. Použitie dvojitej zátvorky

V skutočnosti však môžeme skombinovať vytvorenie a inicializáciu do jedného príkazu; tu používame dvojité zátvorky:

@Test public void whenInitializeSetWithDoubleBraces_containsElements () {Set countries = new HashSet () {{add ("India"); pridať („ZSSR“); pridať („USA“); }}; assertTrue (countries.contains ("India")); } 

Ako je zrejmé z vyššie uvedeného príkladu, sme:

  1. Vytváranie anonymnej vnútornej triedy, ktorá sa rozširuje HashSet
  2. Poskytuje blok inicializácie inštancie, ktorý vyvolá metódu pridania a pridá názov krajiny do súboru HashSet
  3. Na záver môžeme tvrdiť, či je krajina prítomná v HashSet

4. Výhody použitia dvojitých výstuh

Používanie dvojitých zátvoriek má niekoľko jednoduchých výhod:

  • Menej riadkov kódu v porovnaní s natívnym spôsobom vytvárania a inicializácie
  • Kód je čitateľnejší
  • Inicializácia vytvorenia sa vykonáva v rovnakom výraze

5. Nevýhody použitia dvojitých výstuh

Nevýhody použitia dvojitých výstuh sú:

  • Temný, nie veľmi známy spôsob inicializácie
  • Zakaždým, keď ju použijeme, vytvorí ďalšiu triedu
  • Nepodporuje použitie „diamantového operátora“ - funkcie zavedenej v prostredí Java 7
  • Nefunguje, ak je označená trieda, ktorú sa pokúšame rozšíriť konečné
  • Obsahuje skrytý odkaz na nasledujúcu inštanciu, čo môže spôsobiť úniky pamäte

Kvôli týmto nevýhodám sa inicializácia dvojitých zátvoriek považuje za anti-vzor.

6. Alternatívy

6.1. Streamové výrobné metódy

Namiesto toho môžeme na inicializáciu nášho nového rozhrania Java 8 Stream API dobre využiť Nastaviť:

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

6.2. Výrobné metódy kolekcie Java 9

Java 9 tiež prinesie súbor užitočných továrenských metód, ktoré umožnia nasledujúce:

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

Viac sa o tom dočítate v tomto článku.

7. Záver

V tomto stručnom návode sme diskutovali o použití dvojitých zátvoriek spolu s ich výhodami a nevýhodami.

Implementáciu týchto príkladov možno nájsť v projekte GitHub - jedná sa o projekt založený na Maven, takže by malo byť ľahké ho importovať a bežať tak, ako je.