KompiuteriaiProgramavimas

Java Generics: aprašymas ir metodai

Pradedant su Java kalba išvaizda buvo atlikta keletą pakeitimų, kurie neabejotinai atnešė teigiamų akimirkų jos funkcionalumą daug. Vienas iš šių reikšmingų pokyčių yra Java bendros ar apibendrinimų Įvadas. Ši funkcija ne tik, kad kalba lankstesnė ir universalus, bet taip pat yra daug saugiau požiūriu pareikšti duomenų tipus.

Faktas yra tai, kad prieš generinių vaistų įvedimo Java Bendrasis kodas gali būti sukurta ne tik kalbant apie tipas atskaitos objektą. Tokie ryšiai gali būti priskirtas bet kokį objektą. Galų gale, klasių Java yra numanomi objektas klasės paveldėtojai. Tačiau šis požiūris yra potencialus šaltinis daugeliui klaidų, susijusių su saugumo tipų akivaizdžiai konversijos objektą iš objektą tikslinės rūšies. Kai naudojate apibendrinimus visi tvarsčiai atliekamos netiesiogiai ir automatiškai, panaikinant net klaidų potencialą.

Java Generics: Aprašymas ir pavyzdys

Panagrinėkime paprastą pavyzdį apie apibendrinimo taikymo reguliariai klasių žemiau paveikslėlyje. Ir tada pereikite prie išsamiai išnagrinėti visų subtilybių ir niuansų Java bendrinis.

Atkreipkite dėmesį į tai, kaip klasės deklaracija atsiranda pora. Iškart po klasės pavadinimas, atviro kampo skliausteliuose, kuriame nurodyta raidė T. Taip yra užpildo rūšies, kuri yra kūrimo šios klasės egzempliorius procese bus pakeistas tam tikro tipo. Jis atrodo taip: Pora obj = nauja pora (). Reikėtų pažymėti, kad vietoj T gali nurodyti bet kokį laišką, bet, kaip taisyklė, naudoti T, V ar E.

Pastaba: pradedant aštuntą versija Java, nurodant tikslinę rūšį, deklaruojant nuoroda laužtiniuose skliaustuose konstruktorius gali būti paliktas tuščias. Taigi pavyzdys gali būti perrašyti, kaip nurodyta aukščiau: Pora obj = nauja pora <> ().

Kai klasė paskelbta tokiu būdu, tada savo kūno, o ne konkrečių tipų srityse, nuorodos, objektų grąžintų metodų, kuriuos galite naudoti šį laišką. Nuo T kuriant klasės objektas yra pakeičiama tam tikros rūšies, pirma ir antra sritys šiuo atveju bus tipo sveikasis skaičius.

Po argumentus ir firstItem secondItem logika, nurodytos atitinkamame konstruktorius taip pat turi būti tipo sveikasis skaičius arba poklasis. Jei bandysite perduoti duomenų tipą, kuris skiriasi nuo tai, kas buvo nurodyta kuriant objektą, kompiliatorių bus ne tegul šią klaidą. Taigi, argumentai konstruktorius, kai objektas bus taip: pora objektas = nauja pora <> (nauja sveikasis skaičius (1), nauja sveikasis skaičius (2)). Tas pats pasakytina apie argumentus ir metodų setFirst setSecond. Ir kaip jūs tikriausiai atspėjote, metodai getFirst getSecond ir grįš vertę tipo sveikasis skaičius.

Apibendrintas su keletu parametrų klasės tipų

Be bendrųjų klasių taip pat gali paskelbti kelis parametrus tipą, yra nustatyti laužtiniuose skliaustuose kableliu. Pertvarkyta pagal atveju pora klasė yra pateikiama žemiau.

Kaip matote, kai jūs sukuriate šios klasės egzempliorių laužtiniuose skliaustuose turėtų nurodyti tą patį skaičių tipus parametrus. Jei esate susipažinę su šia duomenų struktūros, kaip Žemėlapio tipas, galite matyti, kad ji naudoja lygiai tą patį principą. Ten pirmas argumentas nurodo pagrindinių tipą, o antrasis - su verte tipą. Reikėtų pažymėti, kad perduodami rūšys, kai objektas argumentai gali sutapti. Pavyzdžiui, šis skelbimas Pora klasės egzempliorius yra visiškai teisinga: Pora obj.

Kai apibendrinimų funkcijos

Prieš eidami toliau, reikėtų pažymėti, kad "Java kompiliatorius nesukuria skirtingų versijų klasės pora. Iš tiesų, atsižvelgiant į sudarant apibendrintą tipo visą informaciją proceso dalis išbraukiama. Vietoj to, jums atnešti reikiamus tipus, sudaryti specialią versiją Pair klasėje. Tačiau programoje yra dar tik bendrinis versija klasėje. Šis procesas vadinamas Java Bendrasis valymo tipo.

Pastaba svarbų tašką. Nuorodos į skirtingų versijų tos pačios java bendrinio klasės negali nurodyti vieną ir tą patį objektą. Tai, tarkime, mes turime dvi nuorodos: Pora obj1 ir pora obj2. Todėl, atsižvelgiant obj1 = obj2 klaida. Nors abu kintamieji yra tipo pora , objektai, su kuriais jie susiję, yra skirtingi. Tai yra puikus pavyzdys, saugumo tipų Java bendrinis.

Apribojimai generinių klases

Svarbu žinoti, kad apibendrinimai gali būti taikomas tik nuoroda tipus, tai yra perduoti parametrai Baziniai klasės Java argumentas turi būti klasės tipo. Šie paprasti tipai, tokie kaip, pavyzdžiui, dvigubą arba ilgas, negali būti perduotos. Kitaip tariant, ši eilutė Pora klasės deklaracija neleidžiami: Pora obj. Vis dėlto šis apribojimas nėra rimta problema, nes ten yra atitinkamas Java "įvynioti klasė kiekvienam primityvaus tipo. Griežtai kalbant, jei klasėje Pora norite viską, sveikas ir Būlio vertė avtoupakovka daro viską už jus: Pora obj = nauja pora <> (25 tiesa).

Kitas rimtas apribojimas yra nesugebėjimas sukurti parametro tipo atveju. Pavyzdžiui, ši eilutė bus sukelti kompiliavimo klaidą: T pirmąjį = new T (). Tai akivaizdu, nes jūs nežinote, iš anksto, ar argumentas praėjo visą klasę arba abstraktus ar net sąsaja. Tas pats pasakytina ir sukurti masyvų.

ribotas tipai

Gana dažnai pasitaiko situacijų, kai reikia apriboti tipų, kurie gali būti perduodamas kaip argumentas JAVA generic klasę sąrašą. Tarkime, kad mūsų klasės pora norime viską, tik skaitines vertes tolesnio matematines operacijas ant jų. Norėdami tai padaryti, mes turime nustatyti viršutinę ribą parametro tipo. Jis suprato, naudojant superklasę skelbimų paveldėjo visus argumentus praėjo laužtiniuose skliaustuose. Jis atrodys taip: klasės pora . Tokiu būdu, kompiliatorių nustato, kad vietoj parametras T. gali būti pakeista arba skaičius klasės arba vienas iš jo poklasių.

Tai yra bendra priėmimas. Tokie apribojimai yra dažnai naudojami siekiant suteikti suderinamumas tipo parametrus vienoje ir toje pačioje klasėje. Apsvarstykite pavyzdys mūsų klasės poros: klasės pora . Čia mes pasakyti kompiliatorių, kad tipo, T gali būti savavališkai, ir V tipo turi būti arba T tipo arba vienas iš jo poklasių.

"iš apačios" apriboti yra lygiai taip pat, bet vietoj žodžio tęsiasi rašybos žodį super. Tai yra klasifikuojamas klasės pora sako, kad vietoj T gali būti pakeistas arba ArrayList, arba bet kurios klasės arba sąsaja, kad jis paveldi.

Bendriniai Java metodai ir konstruktoriai

Java, apibendrinimai gali būti taikomas ne tik klases, bet taip pat metodus. Pavyzdžiui, bendrinis metodas gali būti deklaruojamos reguliariai klasėje.

Kaip matyti iš aukščiau esantį paveikslėlyje, ad apibendrintas metodas yra ne big deal. Užteks iki puses tipas metodo įdėti laužtiniuose skliaustuose ir nurodyti tipo parametrus jų.

Jei viskas daroma panašiai kaip konstruktorius:

Kampiniai skliausteliuose šiuo atveju įdėti prieš dizaineris vardu, nes jis neturi grąžos vertę. Abiejų programų rezultatas bus:

sveikasis skaičius

styga

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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