Java kettős zárójel inicializálása

1. Áttekintés

Ebben a gyors bemutatóban megmutatjuk, hogyan használhatók a dupla fogszabályozók objektumok létrehozása és inicializálása egyetlen Java kifejezésben.

Megvizsgáljuk azt is, hogy miért tekinthető ez a technika anti-mintának.

2. Standard megközelítés

Általában az alábbiak szerint inicializálunk és feltöltünk egy sor országot:

@Test public void whenInitializeSetWithoutDoubleBraces_containsElements () {Set countries = new HashSet (); országok.add ("India"); országok.add ("Szovjetunió"); országok.add ("USA"); assertTrue (országok.tartalmaz ("India")); } 

Amint a fenti példából látható, a következőket tesszük:

  1. Hozzon létre egy példányt a HashSet
  2. Adjon országokat a HashSet
  3. Végül megerősítjük, hogy az ország jelen van-e a HashSet

3. A Double Brace használata

A létrehozást és az inicializálást azonban tulajdonképpen egyetlen állításban egyesíthetjük; itt használunk dupla merevítőket:

@Test public void whenInitializeSetWithDoubleBraces_containsElements () {Set countries = new HashSet () {{add ("India"); add ("Szovjetunió"); add ("USA"); }}; assertTrue (országok.tartalmaz ("India")); } 

Amint a fenti példából látható, mi vagyunk:

  1. Anonim belső osztály létrehozása, amely kiterjed HashSet
  2. Olyan példány inicializáló blokk megadása, amely meghívja az add metódust és hozzáadja az ország nevét a HashSet
  3. Végül megállapíthatjuk, hogy az ország jelen van-e a HashSet

4. A kettős fogszabályozó használatának előnyei

A kettős fogszabályozó használatának néhány egyszerű előnye van:

  • Kevesebb kódsor a létrehozás és inicializálás natív módjához képest
  • A kód olvashatóbb
  • A teremtés inicializálása ugyanabban a kifejezésben történik

5. A kettős fogszabályozó használatának hátrányai

A kettős fogszabályozó használatának hátrányai:

  • Homályos, nem széles körben ismert módszer az inicializálásra
  • Minden alkalom alkalmával létrehoz egy extra osztályt
  • Nem támogatja a „gyémánt operátor” - a Java 7-ben bevezetett szolgáltatás - használatát
  • Nem működik, ha meg van jelölve az az osztály, amelyet megpróbálunk kibővíteni végső
  • Rejtett hivatkozást tart a csatoló példányra, amely memóriaszivárgást okozhat

Ezeknek a hátrányoknak köszönhető, hogy a kettős zárójeles inicializálást anti-mintának tekintik.

6. Alternatívák

6.1. Stream gyári módszerek

Ehelyett jól használhatjuk az új Java 8 Stream API-t az inicializáláshoz Készlet:

@Test public void whenInitializeUnmodifiableSetWithDoubleBrace_containsElements () {Set countries = Stream.of ("India", "USSR", "USA") .collect (gyűjtőAndThen (toSet (), Gyűjtemények :: unmodifiableSet)); assertTrue (országok.tartalmaz ("India")); } 

6.2. Java 9 gyűjteménygyári módszerek

Ezenkívül a Java 9 hasznos gyári módszereket hoz létre, amelyek lehetővé teszik a következőket:

Lista lista = List.of ("India", "Szovjetunió", "USA"); Set set = Set.of ("India", "Szovjetunió", "USA"); 

Erről a cikkben olvashat bővebben.

7. Következtetés

Ebben a tömör bemutatóban megvitattuk a kettős fogszabályozók használatát, annak előnyeivel és hátrányaival együtt.

Ezeknek a példáknak a megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.