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.