Guide til Diamond Operator i Java

1. Oversikt

I denne artikkelen vil vi se på diamantoperatør i Java og hvordan generikk og Collections API påvirket utviklingen.

2. Rå typer

Før Java 1.5 støttet Collections API bare råtyper - det var ikke mulig å parameterisere typeargumenter når man konstruerte en samling:

Liste biler = ny ArrayList (); cars.add (nytt Objekt ()); cars.add ("bil"); cars.add (nytt heltal (1));

Dette tillot at alle typer ble lagt til og førte til potensielle casting-unntak ved kjøretid.

3. Generiske

I Java 1.5 ble Generics introdusert - som tillot oss å parameterisere typeargumentene for klasser, inkludert de i Collections API - når deklarerer og konstruerer objekter:

Liste biler = ny ArrayList ();

På dette punktet må vi spesifiser den parameteriserte typen i konstruktøren, som kan være noe uleselig:

Kart<>>> biler = nye HashMap<>>>();

Årsaken til denne tilnærmingen er at råtyper eksisterer fremdeles av hensyn til bakoverkompatibilitet, så kompilatoren må skille mellom disse rå typene og generiske stoffene:

Liste generikk = ny ArrayList (); List raws = ny ArrayList ();

Selv om kompilatoren fremdeles tillater oss å bruke rå typer i konstruktøren, vil den be oss om en advarsel:

ArrayList er en rå type. Henvisninger til generisk ArrayList-type bør parametreres

4. Diamantoperatør

Diamantoperatøren - introdusert i Java 1.7 - legger til typeslutning og reduserer ordlighetsgraden i oppgavene - når du bruker generiske legemidler:

Liste biler = ny ArrayList ();

Java 1.7-kompilatorens type inferensfunksjon bestemmer den mest egnede konstruktørerklæringen som samsvarer med påkallingen.

Vurder følgende grensesnitt og klassehierarki for arbeid med biler og motorer:

offentlig grensesnitt motor {} offentlig klasse diesel implementerer motor {} offentlig grensesnitt kjøretøy {} offentlig klasse bil implementerer kjøretøy {}

La oss lage en ny forekomst av en Bil ved hjelp av diamantoperatøren:

Bil myCar = ny bil ();

Internt vet kompilatoren det Diesel implementerer Motor grensesnitt og er da i stand til å bestemme en passende konstruktør ved å utlede typen.

5. Konklusjon

Enkelt sagt, diamantoperatøren legger til komponentens type inferensfunksjon og reduserer ordlighetsgraden i oppgavene introdusert med generiske.

Noen eksempler på denne veiledningen finner du på GitHub-prosjektet, så du er velkommen til å laste den ned og spille med den.


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