OqPoWah.com

Java Generics: Opis in metode

Jezik Java je od svoje ustanovitve doživel veliko sprememb, ki so nedvomno prinesle pozitivne lastnosti funkcionalnosti. Ena takšna pomembna sprememba je uvedba Java Generic ali generalizacija. Ta funkcija je omogočila, da je jezik ne le bolj prožen in vsestranski, ampak tudi veliko varnejši v smislu zmanjševanja podatkovnih tipov.

java generiki opis

Dejstvo je, da se je pred uvedbo generikov generična koda v Java lahko ustvarila le s sklicevanjem na vrsto objekta. Take povezave je mogoče dodeliti kateremu koli predmetu. Navsezadnje so vsi razredi v Java implicitni potomci razreda Object. Vendar je ta pristop potencialni vir številnih varnostnih napak, če izrecno pretvorite predmet iz Objecta v ciljni tip. Ko se uporabijo generalizacije, se vsi odrezki izvajajo implicitno in samodejno, kar izključuje tudi možnost napak.

Java Generics: opis in primer

Vzemimo preprost primer uporabe sploščenja na običajen razred na sliki spodaj. In šele potem bomo podrobneje preučili vse tanke in nianse Jave Generic.

generična razred java

Obvestilo o razglasitvi razreda Pair. Takoj po imenu razreda se odprejo kotni oklepaji, v katerih je označena črka T. To je vrsta mesta, ki se bo pri ustvarjanju primerka tega razreda nadomestila s posebno vrsto. Izgleda takole: par obj = novi par< Integer> (). Opozoriti je treba, da namesto T lahko določite poljubno črko, vendar praviloma uporabite T, V ali E.

Opomba: začenši z osmo različico Java, ki določa ciljni tip, ko je povezava razglašena, lahko kotne oklepe pustite v konstruktorju prazne. Tako lahko zgornji primer ponovimo na naslednji način: Pair obj = novi par<> ().

Ko je razred razglašen na ta način, lahko v tem telesu namesto določenih vrst polj, referenc in metod, ki jih vrnete z metodami, lahko uporabite to pismo. Ker se T pri določanju tipa objekta zamenja s specifičnim tipom, bo prvo in drugo polje v tem primeru vrste Integer.

Po logiki argumentov in firstItem secondItem iz ustrezni konstruktor mora biti tipa Integer ali podrazred. Če poskušate prenesti vrsto podatkov, ki se razlikuje od tistega, ki je bil določen pri ustvarjanju predmeta, prevajalnik ne bo preskočil te napake. Torej, konstruktor z argumenti pri ustvarjanju predmeta bo imel naslednjo obliko: Pair obj = novi par<> (novi integer (1), novi integer (2)). Enako velja za argumente za setFirst in setSecond metode. In, kot ste verjetno že uganili, bodo metode getFirst in getSecond vrnile vrednosti tipa Integer.

Splošni razred z več tipi parametrov

V generičnih razredih lahko izberete tudi več tipov parametrov, ki so podani v kotnih oklepajih, ločenih z vejicami. Razred Pair za ta primer je predstavljen na spodnji sliki.

java generic

Kot lahko vidite, pri ustvarjanju primerka takega razreda v kotnih oklepajih je treba navesti enako število vrst, kot so parametri. Če poznate takšno vrsto podatkovne strukture, kot je zemljevid, potem boste morda opazili, da se tam uporablja isto načelo. Tam prvi argument določa vrsto ključa, in drugo - vrsto vrednosti. Treba je opozoriti, da so lahko vrste argumentov, ki so bili posredovani ustvarjanju predmeta, enaki. Torej je naslednja izjava primera razreda Pair povsem pravilna: Pair obj.

Nekatere značilnosti posplošitev

Preden nadaljujete, je treba opozoriti, da prevajalnik Java ne ustvari nobene druge različice razreda Pair. Dejansko se v procesu zbiranja izbrišejo vse informacije o generičnem tipu. Namesto tega se oddajo ustrezne vrste, ki ustvarjajo posebno različico razreda Pair. Vendar pa sama program še vedno vsebuje eno posplošeno različico tega razreda. Ta postopek imenujemo čiščenje tipa Java Generic.

Naj poudarimo pomembno točko. Sklicevanje na različne različice istega java generičnega razreda ne more usmeriti na isti predmet. Recimo, da imamo dve povezavi: Pair obj1 in par obj2. Zato pride do napake v vrstici obj1 = obj2. Čeprav sta obe spremenljivki tipa Pair, predmeti, na katere se nanašajo, so drugačni. To je živahen primer varnosti vrst v programu Java Generic.

Omejitve, naložene splošnim razredom




Pomembno je vedeti, da se posplošitve lahko uporablja le za referenčno vrste, ki je, da prenese parametre generični razred java trditev, mora biti vrsta razred. Taki preprosti tipi, kot so na primer dvojni ali dolgi, ni mogoče prenesti. Z drugimi besedami, naslednja vrstica izjave razreda Par ni veljavna: Pair obj. Vendar ta omejitev ni resen problem, saj ima Java ustrezen razred ovitka za vsak primitivni tip. Strictly speaking, če v razredu Par, ki ga želite encapsulating celo število in logično vrednost, auto-pack bo naredil vse za vas: Pair obj = novi par<> (25, res).

Druga resna omejitev je nezmožnost ustvarjanja primerka tipa tipa. Torej, naslednja vrstica bo povzročila napako pri sestavljanju: T first = new T (). To je očitno, ker vnaprej ne veste, ali bo kot argument predstavljen celoten razred ali abstraktni vmesnik. Enako velja za ustvarjanje nizov.

Omejene vrste

Pogosto se pojavljajo razmere, ko je treba omejiti seznam vrst, ki jih je mogoče prenesti kot argument za splošni razred java. Predpostavimo, da v našem paru želimo vključiti izključno numerične vrednosti za nadaljnje matematične operacije na njih. Za to moramo nastaviti zgornjo mejo parametra tipa. To se izvaja z uporabo deklaracije superklasa, podedovane z vsemi argumenti, ki se prenesejo v kotne oklepe. To bo videti tako: razred Pair. Na ta način prevajalnik izve, da namesto parametra T lahko nadomestite bodisi razred Številka ali enega od njegovih podrazredov.

To je običajna tehnika. Take omejitve se pogosto uporabljajo za zagotovitev združljivosti parametrov tipa v istem razredu. Razmislite o primeru v našem paru: razred Pair. Tukaj povemo prevajalcu, da je tip T lahko poljuben, tip V pa mora biti bodisi tip T ali eden od njegovih podrazredov.

Omejitev "od spodaj" se zgodi na popolnoma enak način, toda namesto besede se razširi beseda super. To je razred Pair pravi, da namesto T lahko nadomestite ArrayList ali kateri koli razred ali vmesnik, ki ga podeduje.

Splošne metode in konstruktorji Java

V Javi lahko generalizacije uporabimo ne samo glede na razrede, temveč tudi metode. Torej, generalizirano metodo lahko razglasi v običajnem razredu.

splošne java metode

Kot je prikazano na zgornji sliki, v deklaraciji splošne metode ni nič zapletena. Doseganje kotnih oklepajev je dovolj veliko, preden se vrne vrsta metode, in v njih določite parametre tipov.

V primeru konstruktorja se vse naredi na enak način:

java generični tip čiščenja

Kotni oklepaji so v tem primeru nameščeni pred imenom konstruktorja, ker ne vrne nobene vrednosti. Rezultat dela obeh programov bo:

Integer

String

Zdieľať na sociálnych sieťach:

Príbuzný