SzámítógépekProgramozás

Java Generics: Leírás és módszerek

A Java nyelv kezdete óta sok változáson ment keresztül, ami kétségkívül pozitív funkciókat hozott a funkcionalitásához. Az egyik ilyen jelentős változás a Java Generic bevezetése vagy általánosítása. Ez a funkció nemcsak rugalmasabbá és sokoldalúbbá tette a nyelvet, hanem sokkal biztonságosabbá tette az adattípusokat is.

Az a tény, hogy a generikumok bevezetése előtt a generikus Java-kódot lehet létrehozni, csak az Object típusú hivatkozásokkal. Az ilyen hivatkozások bármilyen objektumhoz rendelhetők. Végtére is, minden Java osztály az objektumosztály implicit leszármazottai. Ez a megközelítés azonban számos típusú biztonsági hiba potenciális forrása lehet, amikor objektumot kifejezetten objektumról a céltípusra konvertál. Ha általánosságokat használunk, minden öntvényt implicit módon és automatikusan hajtunk végre, ami kizárja a hibák esetleges lehetőségét is.

Java Generics: leírás és példa

Vizsgáljuk meg az egyszerűsített példát arra, hogy az általánosíthatóságot az alábbi ábrán a szokásos osztályra alkalmazzuk. És csak akkor folytatjuk a Java Generic összes finomságát és árnyalatát.

Vegye figyelembe, hogy a Pair-osztály be van jelentve. Közvetlenül az osztálynév után kinyitják a szögletes zárójeleket, amelyeken a "T" betű látható, ez egyfajta helyőrző, amelyet egy adott típussal helyettesítünk, amikor létrehozunk egy ilyen példányt. Így néz ki: Pár obj = új Pár (). Meg kell jegyeznünk, hogy a T helyett minden betűt megadhatunk, de általában T, V vagy E.

Megjegyzés: A Java nyolcadik verziójától kezdve, a céltípus megadásával, amikor a hivatkozást bejelentették, a konstruktornak a szögletes zárójeleket üresen hagyhatja. Így a fenti példa átírható a következőképpen: Pár obj = new Pair <> ().

Ha egy osztályt így deklarálnak, akkor ebben a testben, a meghatározott módszerek helyett a mezők, hivatkozások és módszerek helyett, használhatja ezt a levelet. Mivel a T-t egy adott típusú helyettesíti egy osztály objektum létrehozásakor, az első és a második mezők ebben az esetben egész típusúak lesznek.

A logikát követve az első és második argumentumnak a megfelelő konstruktornak átvett argumentumai szintén Integer típusúak vagy annak alosztályai lehetnek. Ha megpróbál átadni egy adattípust, amely eltér az objektum létrehozásakor megadotttól, a fordító nem hagyja figyelmen kívül ezt a hibát. Tehát az objektum létrehozásakor az argumentumokkal rendelkező konstruktor a következő formában lesz: Pár obj = új Pár <> (új Integer (1), új Integer (2)). Ugyanez vonatkozik a setFirst és a setSecond módszerek argumentumaira is. És ahogy valószínűleg már kitaláltad, a getFirst és getSecond módszerek visszatérnek az Integer típusú értékekhez.

Általános típusú, többféle típusú paraméterrel

A generikus osztályokban több típusú paramétert is kijelölhet, amelyeket szögletes zárójelben, vesszővel elválasztva ad meg. A Pair osztály ebben az esetben az alábbi ábrán látható.

Amint látja, egy ilyen osztály példányának létrehozásakor ugyanazokat a típusszámokat kell megadni a szögletes zárójelben. Ha ismeri az ilyen típusú adatszerkezetet, mint a Térkép, akkor észreveheti, hogy ugyanezt az elvet használják ott. Ott az első argumentum meghatározza a kulcs típusát, a második az érték típusát adja meg. Meg kell jegyezni, hogy az objektum létrehozásához átadott érvek típusai ugyanazok lehetnek. Tehát a Pair osztály egy példányának következő deklarációja teljesen helyes: Pair obj.

Az általánosságok néhány jellemzője

Mielőtt tovább folytatnánk, meg kell jegyeznünk, hogy a Java-fordító nem hoz létre különféle változatokat a Pair osztályban. Tény, hogy a fordítás folyamata során minden információt törölnek az általános típusról. Ehelyett a megfelelő típusok leadásra kerülnek, így létrehozva a Pair osztály egy speciális verzióját. Azonban a programnak még mindig van egy általánosított változata ennek az osztálynak. Ezt a folyamatot a Java általános tisztítási típusában hívják meg.

Felhívjuk a figyelmet egy fontos pontra. Az azonos java generikus osztály különböző verzióihoz kapcsolódó hivatkozások nem mutathatnak ugyanazt az objektumot. Ez azt jelenti, hogy két linkünk van: Pair obj1 és Pair obj2. Ezért hiba lép fel az obj1 = obj2 sorban. Habár mindkét változó típus Pair , az általuk említett objektumok eltérőek. Ez egy élénk példa a Java Generic típusú típusok biztonságára.

Az általánosított osztályokra vonatkozó korlátozások

Fontos tudni, hogy az általánosságok csak a referenciatípusokra alkalmazhatók, vagyis az általános osztályú java argumentumnak átadott argumentumnak feltétlenül az osztály típusa. Ilyen egyszerű típusok, mint pl. Kettős vagy hosszú, nem lehet továbbítani. Más szóval, a következő Pair osztály-deklaráció nem érvényes: Pair obj. Azonban ez a korlátozás nem jelent komoly problémát, mivel a Java minden primitív típushoz megfelelő wrapper osztályt tartalmaz. Szigorúan megfogalmazva, ha egy egész osztályt és egy logikai értéket szeretnél beágyazni a Pair osztályban, az automatikus csomag mindent megtesz Önért: Pár obj = new Pair <> (25, true).

Egy másik komoly korlátozás az, hogy lehetetlen létrehozni egy típusparaméter példányát. Tehát a következő sor egy összeállítási hibát okoz: T első = új T (). Ez nyilvánvaló, hiszen nem tudod előre, hogy egy teljes osztály vagy egy absztrakt felület lesz-e érvként. Ugyanez érvényes a tömbök létrehozására is.

Korlátozott típusok

Gyakran vannak olyan helyzetek, amikor szükség van arra, hogy korlátozzuk a java generikus osztályra argumentumként átadható típusok listáját. Tegyük fel, hogy a Pair osztályunkban csak numerikus értékeket szeretnénk befogadni további matematikai műveletekre. Ehhez meg kell adnunk a típusparaméter felső határát. Ez egy szuperklassz deklarációval valósul meg, amelyet minden szögvas zárójelben örökölt. Így fog kinézni: a Pár . Ily módon a fordító megtudja, hogy a T paraméter helyett helyettesítheti a számosztályt vagy az egyik alosztályát.

Ez egy közös technika. Az ilyen korlátozásokat gyakran használják az azonos osztályú típusú paraméterek kompatibilitásának biztosítására. Tekintsünk egy példát Pair osztályunkra: osztály Pair . Itt megmondjuk a fordítónak, hogy a T típus tetszőleges lehet, és az V. típusnak T típusnak vagy annak egyik alosztályának kell lennie.

Az alulról fennálló korlátozás pontosan ugyanúgy történik, de a szó kiterjesztése helyett a szuper szó íródik. Ez azt jelenti, hogy a Pair osztály deklarációja azt jelzi, hogy a T helyett egy ArrayList vagy bármely olyan osztály vagy interfész, amelyet örökölhet, helyettesíthető.

Általános Java módszerek és konstruktorok

A Java általánosságok nemcsak az osztályokra vonatkoznak, hanem a módszerek is. Tehát az általánosított módszer a szokásos osztályban deklarálható.

Amint a fenti ábrán látható, nincs semmi bonyolult az általánosított módszer deklarálásában. Elegendő a szögletes zárójeleket elhelyezni a visszatérési mód előtt, és megadni a típusparamétereket.

A konstruktor esetében mindent ugyanúgy végzünk:

Ebben az esetben a szögletes zárójeleket a konstruktor neve előtt helyezik el, mivel semmilyen értéket nem ad vissza. Mindkét program munkájának eredménye:

egész szám

húr

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hu.delachieve.com. Theme powered by WordPress.