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.