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.


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