Vodič za Dijamantni operater na Javi

1. Pregled

U ovom ćemo članku pogledati dijamantni operater u Javi i kako su generički lijekovi i API za zbirke utjecali na njegov razvoj.

2. Sirove vrste

Prije Jave 1.5, API Zbirke podržavao je samo sirove tipove - nije bilo načina da se argumenti tipa parametriziraju prilikom izrade zbirke:

Popis automobila = novi ArrayList (); cars.add (novi objekt ()); cars.add ("automobil"); cars.add (novi Integer (1));

To je omogućilo dodavanje bilo koje vrste i dovelo je do potencijalnih izuzetaka pri lijevanju tijekom izvođenja.

3. Generički lijekovi

U Javi 1.5 predstavljeni su generički lijekovi - što nam je omogućilo parameterizaciju argumenata tipa za klase, uključujući one u API-ju Collections - prilikom deklariranja i konstrukcije objekata:

Popis automobila = novi ArrayList ();

U ovom trenutku moramo navedite parametarski tip u konstruktoru, što može biti donekle nečitko:

Karta<>>> automobili = novi HashMap<>>>();

Razlog ovog pristupa je taj sirovi tipovi i dalje postoje zbog povratne kompatibilnosti, pa prevodilac mora razlikovati ove sirove vrste i generike:

Popis generičkih podataka = novi ArrayList (); Popis sirovih = novi ArrayList ();

Iako nam prevodilac još uvijek dopušta upotrebu sirovih tipova u konstruktoru, zatražit će od nas porukom upozorenja:

ArrayList je sirovi tip. Reference na generički tip ArrayList trebaju se parametrizirati

4. Dijamantni operater

Dijamantni operater - predstavljen u Javi 1.7 - dodaje zaključivanje tipa i smanjuje opširnost u dodjeli - kada se koriste generički lijekovi:

Popis automobila = novi ArrayList ();

Značajka zaključivanja tipa kompajlera Java 1.7 određuje najprikladniju deklaraciju konstruktora koja odgovara pozivu.

Uzmite u obzir sljedeće sučelje i hijerarhiju klasa za rad s vozilima i motorima:

javno sučelje Motor {} javna klasa Dizel implementira Motor {} javno sučelje Vozilo {} javna klasa Automobil implementira Vozilo {}

Stvorimo novu instancu a Automobil pomoću dijamantskog operatora:

Car myCar = novi automobil ();

Interno to prevodilac zna Dizel provodi Motor sučelje, a zatim može odrediti prikladni konstruktor zaključivanjem tipa.

5. Zaključak

Jednostavno rečeno, dijamantni operater dodaje značajku zaključivanja tipa kompajleru i smanjuje opširnost u dodjeli uvedenim s generičkim lijekovima.

Neke primjere ovog vodiča možete pronaći na projektu GitHub, pa ga slobodno preuzmite i igrajte se s njim.