Vejledning til diamantoperatøren i Java

1. Oversigt

I denne artikel vil vi se på diamantoperatør i Java og hvordan generics og Collections API påvirkede dets udvikling.

2. Rå typer

Før Java 1.5 understøttede Collections API kun rå typer - der var ingen måde, hvorpå typeargumenter kunne parametriseres, når der konstrueres en samling:

Liste biler = ny ArrayList (); cars.add (nyt objekt ()); cars.add ("bil"); biler. tilføj (nyt heltal (1));

Dette gjorde det muligt at tilføje enhver type og førte til potentielle casting-undtagelser ved kørsel.

3. Generiske stoffer

I Java 1.5 blev Generics introduceret - hvilket tillod os at parametrere typeargumenterne for klasser, inklusive dem i Collections API - når deklarerer og konstruerer objekter:

Liste biler = ny ArrayList ();

På dette tidspunkt skal vi angiv den parametriserede type i konstruktøren, som kan være noget ulæseligt:

Kort<>>> biler = nyt HashMap<>>>();

Årsagen til denne tilgang er, at råtyper findes stadig af hensyn til bagudkompatibilitet, så kompilatoren skal skelne mellem disse rå typer og generiske stoffer:

Liste generiske = nye ArrayList (); List raws = ny ArrayList ();

Selvom kompilatoren stadig tillader os at bruge rå typer i konstruktøren, vil den bede os om en advarselsmeddelelse:

ArrayList er en rå type. Henvisninger til generisk type ArrayList skal parametriseres

4. Diamantoperatør

Diamantoperatøren - introduceret i Java 1.7 - tilføjer typeforståelse og reducerer ordligheden i opgaverne - når du bruger generiske stoffer:

Liste biler = ny ArrayList ();

Java 1.7-kompilatorens type inferensfunktion bestemmer den mest egnede konstruktørerklæring, der matcher påkaldelsen.

Overvej følgende grænseflade og klassehierarki til arbejde med køretøjer og motorer:

offentlig grænseflade Motor {} offentlig klasse dieselværktøjer Motor {} offentlig grænseflade køretøj {} offentlig klasse bilværktøjer køretøj {}

Lad os oprette en ny forekomst af en Bil ved hjælp af diamantoperatøren:

Bil myCar = ny bil ();

Internt ved compileren det Diesel implementerer Motor interface og er derefter i stand til at bestemme en passende konstruktør ved at udlede typen.

5. Konklusion

Kort sagt, diamantoperatøren tilføjer typeforståelsesfunktionen til compileren og reducerer ordligheden i de opgaver, der er introduceret med generics.

Nogle eksempler på denne vejledning kan findes på GitHub-projektet, så du er velkommen til at downloade det og lege med det.


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