Sprievodca diamantovým operátorom v Jave
1. Prehľad
V tomto článku sa pozrieme na diamantový operátor v Jave a ako generické lieky a API kolekcie ovplyvnili jeho vývoj.
2. Surové typy
Pred jazykom Java 1.5 podporovalo rozhranie API kolekcie iba nespracované typy - pri konštrukcii kolekcie nebolo možné parametrizovať argumenty typu:
Zoznam automobilov = new ArrayList (); cars.add (nový objekt ()); cars.add ("auto"); cars.add (nové celé číslo (1));
To umožnilo pridať akýkoľvek typ a viedli k potenciálnym výnimkám pri prenášaní za behu.
3. Generiká
V prostredí Java 1.5 boli predstavené generiká - čo nám umožnilo parametrizovať argumenty typu pre triedy, vrátane tých, ktoré sú v rozhraní API rozhraní Collections - pri deklarovaní a konštrukcii objektov:
Zoznam automobilov = new ArrayList ();
V tomto okamihu musíme v konstruktore zadajte parametrizovaný typ, čo môže byť trochu nečitateľné:
Mapa <>>> autá = nová HashMap <>>>();
Dôvod tohto prístupu je ten surové typy stále existujú kvôli spätnej kompatibilite, takže kompilátor musí rozlišovať medzi týmito prvotnými typmi a generikami:
Zoznam generík = nový ArrayList (); List raws = new ArrayList ();
Aj keď nám kompilátor stále umožňuje používať v konštruktore nespracované typy, vyzve nás varovnou správou:
ArrayList je surový typ. Odkazy na generický typ ArrayList by mali byť parametrizované
4. Diamantový operátor
Operátor diamantov - predstavený v Jave 1.7 - pridáva odvodenie typu a znižuje výrečnosť v zadaniach - pri použití generík:
Zoznam automobilov = new ArrayList ();
Funkcia odvodenia typu kompilátora Java 1.7 určuje najvhodnejšiu deklaráciu konštruktora, ktorá sa zhoduje s vyvolaním.
Zvážte nasledujúce rozhranie a hierarchiu tried pre prácu s vozidlami a motormi:
verejné rozhranie Engine {} verejná trieda Diesel implementuje Engine {} verejné rozhranie Vehicle {} verejná trieda Car implementuje Vehicle {}
Vytvorme novú inštanciu a Auto pomocou diamantového operátora:
Auto myCar = nové auto ();
Interne to prekladač vie Diesel realizuje Motor rozhranie a potom je schopný určiť vhodný konštruktor odvodením typu.
5. Záver
Jednoducho povedané, operátor diamantu pridá do kompilátora funkciu odvodenia typu a zníži výrečnosť v priradeniach zavedených pomocou generík.
Niektoré príklady tohto tutoriálu nájdete v projekte GitHub, takže si ho pokojne stiahnite a zahrajte si s ním.