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:
- Vytvorte inštanciu HashSet
- Pridajte krajiny do HashSet
- 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:
- Vytváranie anonymnej vnútornej triedy, ktorá sa rozširuje HashSet
- Poskytuje blok inicializácie inštancie, ktorý vyvolá metódu pridania a pridá názov krajiny do súboru HashSet
- 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.