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:
- Hozzon létre egy példányt a HashSet
- Adjon országokat a HashSet
- 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:
- Anonim belső osztály létrehozása, amely kiterjed HashSet
- 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
- 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.