Útmutató a Java gyémántkezelőhöz

1. Áttekintés

Ebben a cikkben megnézzük a gyémánt operátor a Java-ban, valamint hogy a generikumok és a Collections API hogyan befolyásolták annak fejlődését.

2. Nyers típusok

A Java 1.5 előtt a Collections API csak nyers típusokat támogatott - a gyűjtemény felépítésénél nem volt mód paraméterek paraméterezésére:

Autók listája = new ArrayList (); autók.add (új objektum ()); autók.add ("autó"); autók.add (új egész szám (1));

Ez lehetővé tette bármilyen típus hozzáadását és futás közbeni potenciális casting kivételekhez vezetett.

3. Generikusok

A Java 1.5-ben a Generics került bevezetésre - ami lehetővé tette számunkra az osztályok típus argumentumainak paraméterezését, beleértve a Gyűjtemények API-jába tartozókat is - objektumok deklarálásakor és összeállításakor:

Autók listája = new ArrayList ();

Ezen a ponton muszáj adja meg a paraméterezett típust a konstruktorban, amely kissé olvashatatlan lehet:

Térkép<>>> autók = új HashMap<>>>();

Ennek a megközelítésnek az az oka a visszamenőleges kompatibilitás érdekében még mindig léteznek nyers típusok, ezért a fordítónak meg kell különböztetnie ezeket a nyers típusokat és az általánosakat:

List generics = new ArrayList (); List nyers = new ArrayList ();

Annak ellenére, hogy a fordító továbbra is engedélyezi a nyers típusok használatát a konstruktorban, figyelmeztető üzenetet küld:

Az ArrayList egy nyers típus. Az ArrayList általános típusú hivatkozásokat paraméterezni kell

4. Gyémántkezelő

A gyémánt operátor - bevezetve a Java 1.7-be - hozzáadja a típus következtetését és csökkenti a kijelölések részletességét - generikus gyógyszerek használata esetén:

Autók listája = new ArrayList ();

A Java 1.7 fordító típuskövetkeztetési funkciója meghatározza a legmegfelelőbb konstruktor deklarációt, amely megfelel az invokációnak.

Vegye figyelembe a következő interfészt és osztályhierarchiát a járművek és motorok használatához:

nyilvános kezelőfelület Motor {} nyilvános osztályú dízel hajtóművek motor {} nyilvános felület jármű {}} nyilvános osztályú gépjármű járművek {}

Hozzunk létre egy új példányt a Autó a gyémánt operátor használatával:

Autó myCar = új autó ();

Belsőleg ezt a fordító tudja Dízel végrehajtja a Motor interfészt, majd a típus következtetésével képes meghatározni a megfelelő konstruktort.

5. Következtetés

Egyszerűen fogalmazva: a gyémánt operátor hozzáadja a típus következtetés funkcióját a fordítóhoz, és csökkenti a generikusokkal bevezetett hozzárendelések sokszínűségét.

Néhány példa erre az oktatóanyagra a GitHub projektben található, ezért nyugodtan töltse le és játsszon vele.