PočítačeProgramovanie

Java Generics: opis a metódy

Počnúc vzhľadu jazyka Java prešla mnohými zmenami, ktoré nepochybne priniesol pozitívne okamihy v jeho funkčnosť. Jeden z týchto významných zmien je zavedenie Java generické či zovšeobecnenie. Táto funkcia nielen robiť jazyk viac flexibilné a univerzálne, ale aj oveľa bezpečnejšie, pokiaľ ide o uvedenie dátové typy.

Faktom je, že pred zavedením generík v Jave generického kóde by mohli byť vytvorené, a to nielen pokiaľ ide o referenčný typ objektu. Tieto odkazy možno priradiť ľubovoľný objekt. Koniec koncov, tried v Jave sú implicitné triedy Object dedičmi. Avšak, tento prístup je potenciálnym zdrojom mnohých chýb súvisiacich s typmi cenných papierov v zdanlivej premeny objektu z objektu do cieľového typu. Pri použití zovšeobecnenie všetky hody sa vykonávajú implicitne a automaticky, čo eliminuje aj potenciál pre chyby.

Java Generics: popis a príklad

Uvážme jednoduchý príklad uplatnenia generalizácie do bežných tried na obrázku nižšie. A potom pokračovať do podrobného skúmania všetkých nuansy a nuansy Java Generic.

Venovať pozornosť tomu, akým spôsobom vyhlásenie trieda dochádza Pair. Bezprostredne po názvom triedy, otvorené lomené zátvorky, ktoré je uvedené písmeno T. Jedná sa o druh plniva, ktorý je v procese vytvárania inštancie tejto triedy bude nahradený určitého typu. Vyzerá to takto: Dvojica obj = new Pair (). Je potrebné poznamenať, že namiesto T možné zadať akýkoľvek list, ale spravidla pomocou T, V alebo E.

Poznámka: počínajúc ôsmu verziu Javy, stanovenie cieľovej typ pri deklarovaní referencie uholníky v konstruktoru môže zostať prázdna. Tak napríklad môže byť prepísané ako je uvedené vyššie: Dvojica obj = new Pair <> ().

Ak je trieda deklarovaný takým spôsobom, potom v jeho tele namiesto špecifických typov polí, odkazy objektov vrátených podľa metód, ktoré môžete použiť ten list. Vzhľadom k tomu, T pri vytváraní objekt triedy je nahradený určitého typu, prvej a druhej polia v tomto prípade byť typu celé číslo.

Podľa logiky argumentov a firstItem secondItem, postúpené príslušnému konstruktoru musí byť typu Integer alebo podtriedy. Ak sa pokúsite vysielať dátový typ, ktorý je odlišný od toho, čo bolo určené pri vytváraní objektu, kompilátor nenechá túto chybu. To znamená, že argumenty konštruktor keď objekt bude nasledujúci: Pár obj = nový pár <> (nové celé číslo (1), nový Celé číslo (2)). To isté platí pre argumenty a metódy setFirst setSecond. A ako ste pravdepodobne uhádli, metódy getFirst getSecond a vráti hodnotu typu Integer.

Zovšeobecnený s niekoľkými parametrami typov tried

Zovšeobecnených tried môžu tiež deklarovať viac parametre typu, ktoré sú stanovené v hranatých zátvorkách s čiarkou. Prebudovaný prípade class Pair je uvedený nižšie.

Ako vidíte, pri vytvorení inštancie tejto triedy v hranatých zátvorkách by malo byť uvedené rovnaký počet typov ako parametre. Ak ste oboznámení s týmto typom dátové štruktúry ako mapa, môžete vidieť, že používa úplne rovnaký princíp. Tam je prvý argument určuje typ kľúča, a druhá - typ hodnoty. Je potrebné poznamenať, že typy prenášaná keď objekt argumenty sa môžu prekrývať. Napríklad nasledujúci reklama Pair trieda inštancie je úplne správne: Dvojica obj.

Niektoré funkcie zovšeobecnenie

Ako ísť ďalej, je potrebné poznamenať, že Java kompilátor nevytvára rôzne verzie triedy Pair. V skutočnosti, v procese zostavovania zovšeobecnené Typ Všetky informácie sa vypúšťa. Namiesto toho, aby príslušné typy a vytvára špeciálnu verziu triedy Pair. Avšak, v programe je stále len generická verzia triedy. Tento proces sa nazýva Java typu Generic čistenie.

Poznámka dôležitý bod. Odkazy na rôzne verzie rovnakej java generické triedy nemôže upozorniť na jeden a ten istý objekt. To znamená, že by sme mať dva odkazy: Pár obj1 a pár obj2. V dôsledku toho, v súlade obj1 = obj2 chyba. Hoci obe premenné sú typu Dvojica , objekty, na ktoré sa vzťahujú, sú rôzne. To je ukážkovým príkladom typov zabezpečenia v Java Generic.

Obmedzenia týkajúce sa generických tried

Je dôležité vedieť, že zovšeobecnenie možno aplikovať iba na referenčné typy, ktoré je odovzdať parametre generických tried java argument musí byť typu triedy. Tieto jednoduché typy, ako sú, napr., Dvojité alebo dlhé, nemôžu byť prevedené. Inými slovami, tento riadok deklarácia triedy Pair nie je dovolené: Pár obj. Avšak, toto obmedzenie nie je vážny problém, pretože existuje zodpovedajúce Java triedy obálky pre každý primitívne typu. Prísne vzaté, v prípade, že trieda Pair chcete zapuzdrenie celé číslo a logická hodnota avtoupakovka robí všetko za vás Dvojica obj = new Pair <> (25, true).

Ďalším závažným obmedzením je nemožnosť vytvorenie inštancie typ parametra. Napríklad nasledujúci riadok spôsobí chybu kompilácie: T prvý = new T (). To je zrejmé, pretože neviete vopred, či argument prešiel kompletnou triedu alebo abstraktné, alebo dokonca rozhranie. To isté platí aj pre vytvorenie poľa.

obmedzené typy

Docela často existujú situácie, kedy je nutné obmedziť zoznam druhov, ktoré môžu byť odovzdané ako argument pre Java generickú triedu. Dajme tomu, že sme v našej triede Pár chcieť zapouzdřit iba číselné hodnoty pre ďalšie matematické operácie na nich. K tomu je potrebné definovať hornú hranicu typ parametra. To je realizované pomocou nadradené reklamy zdedili všetky argumenty odovzdané do lomených zátvoriek. Bude vyzerať takto: class Pair . Týmto spôsobom sa zistí, že prekladač namiesto parametra T môže byť substituovaná alebo trieda Číslo alebo niektorej z jej podtriedy.

Jedná sa o bežný príjem. Tieto obmedzenia sú často používané pre poskytovanie parametrov typu kompatibilita v jednej a tej istej triedy. Zoberme si za príklad v našej triede Pair: class Pair . Tu sa povedať kompilátora, že typ T môže byť ľubovoľný, a typ V musí byť buď typu T alebo niektorej z jej podtriedy.

Obmedzením "zdola" je presne rovnakým spôsobom, ale namiesto slova rozširuje, aby bolo zrejmé slovo Super. Ktorá je klasifikovaná triedou Pair hovorí, že namiesto T môže byť nahradená alebo ArrayList alebo akúkoľvek triedu alebo rozhranie, ktoré dedia.

Generické metódy Java a konštruktérov

V Jave, zovšeobecnenie možno aplikovať nielen na úrovni tried, ale aj metódy. Napríklad všeobecný spôsob môže byť zanesené do bežnej triedy.

Ako je vidieť na obrázku vyššie, tento spôsob reklamy generalizované nie je žiadny veľký problém. Dosť pred návratový typ metódy dať uholníkov a zadať parametre typu v nich.

Ak je všetko vykonané podobne ako konstruktoru:

Uholníky v tomto prípade predložený menu tvorcu, pretože nemá žiadnu návratovú hodnotu. Výsledkom oboch programov bude:

celé číslo

povrázok

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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