Initialisering af Java Double Brace

1. Oversigt

I denne hurtige vejledning viser vi, hvordan dobbeltbøjler kan bruges til oprettelse og initialisering af objekter i et enkelt Java-udtryk.

Vi vil også se på, hvorfor denne teknik kan betragtes som et antimønster.

2. Standard tilgang

Normalt initialiserer og udfylder vi et sæt lande som følger:

@Test offentlig ugyldig nårInitializeSetWithoutDoubleBraces_containsElements () {Set lande = nyt HashSet (); country.add ("Indien"); country.add ("USSR"); country.add ("USA"); assertTrue (lande. indeholder ("Indien")); } 

Som det kan ses fra ovenstående eksempel, gør vi følgende:

  1. Opret en forekomst af HashSet
  2. Føj lande til HashSet
  3. Endelig hævder vi, om landet er til stede i HashSet

3. Brug af dobbeltbøjle

Vi kan dog faktisk kombinere oprettelse og initialisering i en enkelt erklæring; det er her, vi bruger dobbelte seler:

@Test offentlig ugyldig nårInitializeSetWithDoubleBraces_containsElements () {Set lande = ny HashSet () {{tilføj ("Indien"); tilføj ("USSR"); tilføj ("USA"); }}; assertTrue (lande. indeholder ("Indien")); } 

Som det kan ses fra ovenstående eksempel, er vi:

  1. Oprettelse af en anonym indre klasse, der strækker sig HashSet
  2. Tilvejebringelse af en initialiseringsblok, der påberåber add-metoden og føjer landets navn til HashSet
  3. Endelig kan vi hævde, om landet er til stede i HashSet

4. Fordele ved at bruge dobbelte seler

Der er nogle enkle fordele ved at bruge dobbelte seler:

  • Færre kodelinjer sammenlignet med den oprindelige måde til oprettelse og initialisering
  • Koden er mere læselig
  • Initiering af oprettelse sker i samme udtryk

5. Ulemper ved at bruge dobbelte seler

Ulemper ved at bruge dobbelte seler er:

  • Uklar, ikke almindeligt kendt måde at foretage initialiseringen på
  • Det skaber en ekstra klasse hver gang vi bruger den
  • Understøtter ikke brugen af ​​"diamantoperatøren" - en funktion introduceret i Java 7
  • Virker ikke, hvis den klasse, vi prøver at udvide, er markeret endelig
  • Indeholder en skjult reference til den vedlagte forekomst, som kan forårsage hukommelseslækage

Det skyldes disse ulemper, at initialisering af dobbeltbøjle betragtes som et antimønster.

6. Alternativer

6.1. Stream fabriksmetoder

I stedet kan vi bruge den nye Java 8 Stream API til at initialisere vores Sæt:

@Test offentlig ugyldig nårInitializeUnmodifiableSetWithDoubleBrace_containsElements () {Set lande = Stream.of ("Indien", "USSR", "USA") .collect (collectAndThen (toSet (), Collections :: unmodifiableSet)); assertTrue (lande. indeholder ("Indien")); } 

6.2. Java 9 samlinger Fabriksmetoder

Java 9 vil også bringe et sæt nyttige fabriksmetoder, der gør følgende mulige:

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

Du kan læse mere om dette i denne artikel.

7. Konklusion

I denne koncise vejledning diskuterede vi brugen af ​​dobbeltbøjler sammen med dens fordele og ulemper.

Implementeringen af ​​disse eksempler findes i GitHub-projektet - dette er et Maven-baseret projekt, så det skal være let at importere og køre som det er.


$config[zx-auto] not found$config[zx-overlay] not found