Számítógépek, Programozá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
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
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
Á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
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
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
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
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
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
Á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