Mga computerProgramming

Java Generics: paglalarawan at mga pamamaraan

Simula sa hitsura ng Java wika ay undergone ng maraming mga pagbabago, na walang pagsala nagdala positibong sandali sa kanyang pag-andar. Isa sa mga makabuluhang mga pagbabago ay ang pagpapakilala ng Java Generic o paglalahat. Ang paggamit na ito ay hindi lamang gumawa ng wikang mas nababaluktot at maraming nalalaman, ngunit din mas ligtas sa mga tuntunin ng pagdadala ng mga uri ng data.

Ang katotohanan ay na bago ang pagpapakilala ng generics sa Java generic code ay maaaring malikha, hindi lamang sa mga tuntunin ng i-type ang reference Object. Ang ganitong mga link ay maaaring italaga sa anumang bagay. Matapos ang lahat, mga klase sa Java ay implicit Object klase ng tagapagmana. Gayunman, ang paraan na ito ay isang potensyal na mapagkukunan ng maraming mga error na may kaugnayan sa uri ng seguridad sa mistulang conversion ng isang bagay mula sa mga Bagay sa uri target. Kapag gumagamit ng paglalahat lahat ng cast ay ginanap nang kataon lamang at awtomatikong, inaalis kahit na ang mga potensyal na para sa mga error.

Java Generics: paglalarawan at mga halimbawa

Ipaalam sa amin isaalang-alang ang isang simpleng halimbawa ng application ng generalization sa mga regular na mga klase sa figure sa ibaba. At pagkatapos ay magpatuloy sa isang detalyadong pagsusuri ng lahat ng mga subtleties at nuances ng Java Generic.

Bigyang-pansin ang paraan kung saan ang klase deklarasyon nangyayari Pares. Agad-agad matapos ang pangalan ng klase, bukas na anggulo bracket, na ipinapahiwatig ang sulat T. Ito ay isang uri ng filler, na kung saan ay nasa proseso ng paglikha ng isang halimbawa ng mga uri na ito ay papalitan sa pamamagitan ng isang partikular na uri. Mukhang tulad ng sumusunod: Pair obj = bagong Pair (). Dapat ito ay nabanggit na sa halip na T ay maaaring tukuyin ang anumang sulat, ngunit, bilang isang panuntunan, gumamit ng T, V o E.

Tandaan: simula sa ikawalo bersyon ng Java, na tumutukoy sa uri ng target kapag deklarasyon reference anggulo bracket sa tagapagbuo maaaring iwanang walang laman. Kaya halimbawa ay maaaring rewritten bilang sa itaas: Pair obj = bagong Pair <> ().

Kapag ang isang klase ay ipinahayag sa paraan, at pagkatapos ay sa kanyang katawan sa halip na mga tiyak na uri ng mga patlang, mga link, mga bagay ay bumalik sa pamamagitan ng mga pamamaraan na maaari mong gamitin ang sulat na iyon. Since T kapag lumilikha ng klase object ay napalitan ng isang partikular na uri, una at ikalawang mga patlang sa kasong ito ay magiging ng uri ng integer.

Kasunod ng logic sa mga argumento at firstItem secondItem, tinutukoy ang naaangkop na constructor ay dapat ding maging ng uri ng integer o subclass. Kung susubukan mong magpadala ng isang uri ng data na ay naiiba mula sa kung ano ay tinukoy kapag lumilikha ng isang bagay, ang tagatala ay hindi hayaan ang pagkakamaling ito. Kaya, ang mga argumento constructor kapag ang isang bagay ay magiging tulad ng sumusunod: Pair obj = bagong Pair <> (bagong Integer (1), bagong Integer (2)). Ang parehong naaangkop sa mga argumento at mga pamamaraan setFirst setSecond. At tulad marahil mo na nahulaan, mga paraan getFirst getSecond at ibabalik ang halaga ng uri ng integer.

Heneralisado na may ilang mga parameter uri ng klase

Sa pangkalahatan klase ay maaari ring ipahayag ang maraming mga parameter ng uri na ay naka-set sa anggulo bracket gamit ang isang kuwit. Muling dinisenyo sa pamamagitan ng isang case Pares ng klase ay ipinakita sa ibaba.

Tulad ng iyong nakikita, kapag lumikha ka ng isang halimbawa ng mga uri na ito sa anggulo bracket ay dapat ipahiwatig ang parehong bilang ng mga uri ng mga parameter. Kung kayo ay pamilyar sa ganitong uri ng data na istraktura bilang Map, maaari mong makita na ito ay gumagamit ng eksakto ang parehong prinsipyo. Doon, ang unang argumento ay tumutukoy sa uri ng key, at ang pangalawang - ang uri ng halaga. Dapat ito ay nabanggit na ang mga uri ng transmitted kapag ang isang bagay na argument ay maaaring nagsasapawan. Halimbawa, ang sumusunod na ad Pares Halimbawa klase ay ganap na tama: Pair obj.

Ang ilang mga tampok ng paglalahat

Bago pagpunta sa karagdagang, dapat ito ay mapapansin na ang Java compiler ay hindi lumikha ng iba't ibang mga bersyon ng klase Pares. Sa katunayan, sa proseso ng kino-compile ang isang pangkalahatan type ang lahat ng impormasyon ay tinanggal. Sa halip, dalhin sa iyo ang naaangkop na uri, ang paglikha ng isang espesyal na bersyon ng Pares klase. Gayunpaman, sa programa mayroon pa ring lamang ng isang generic na bersyon ng klase. Ang prosesong ito ay tinatawag na sa Java type Generic cleaning.

Tandaan isang mahalagang punto. Mga link sa mga iba't ibang mga bersyon ng parehong java pangkaraniwang klase ay hindi maaaring ituro sa isa at ang parehong bagay. Iyon ay, ipagpalagay na mayroon kaming dalawang mga link: Pair obj1 at Pair obj2. Bilang resulta, sa linya obj1 = obj2 isang error. Kahit na parehong mga variable ay ang uri Pair , ang mga bagay na kung saan sila mag-refer, ay magkaiba. Ito ay isang de-kalidad na halimbawa ng mga uri ng seguridad sa Java Generic.

Paghihigpit sa mga generic na mga klase

Ito ay mahalaga upang malaman na ang paglalahat ay maaaring inilapat lamang na banggitin ang mga uri, iyon ay upang pumasa sa mga parameter pangkaraniwang klase java argument ay dapat na isang uri ng klase. Ang mga simpleng mga uri, tulad ng, hal, double o mahaba, hindi maaaring mailipat. Sa ibang salita, ang sumusunod na linya Pares klase deklarasyon ay hindi pinapayagan: Pair obj. Gayunman, ang limitasyong ito ay hindi isang malubhang problema, tulad ng mayroong isang kaukulang Java wrapper klase para sa bawat primitive uri. Mahigpit na nagsasalita, kung ang klase Pares gusto mong encapsulate ng isang integer at Boolean halaga avtoupakovka ginagawa ang lahat ng bagay para sa iyo: Pair obj = bagong Pair <> (25, true).

Ang isa pang malubhang limitasyon ay ang kawalan ng kakayahan upang lumikha ng isang halimbawa ng mga uri ng parameter. Halimbawa, ang sumusunod na linya ay magiging sanhi ng isang compilation error: T unang = bagong T (). Ito ay kitang-kita, dahil hindi mo alam nang maaga kung ang isang argument lumipas ang isang buong klase o abstract, o kahit na interface. Ang parehong napupunta para sa paglikha ng array.

limitadong mga uri

Medyo madalas na may mga sitwasyon kapag ito ay kinakailangan upang limitahan ang listahan ng mga uri na maaaring maipasa bilang isang argument sa Java generic class. Ipaalam sa amin ipagpalagay na sa aming klase Pares gusto naming encapsulate lamang ang mga halagang numero para sa karagdagang mathematical operations sa mga ito. Upang gawin ito kailangan namin upang tukuyin ang mataas na limitasyon ng uri ng parameter. Ito ay natanto sa pamamagitan ng isang superclass ads minana ang lahat ng mga argumento ang pumasa sa angle brackets. Magmumukha itong mga sumusunod: klase Pair . Sa ganitong paraan, ang compiler hahanap na sa halip na ang parameter T ay maaaring substituted o Numero ng klase o isa sa mga subclasses.

Ito ay isang pangkaraniwang reception. Ang ganitong mga paghihigpit ay madalas na ginagamit upang magbigay ng mga parameter compatibility uri sa isa at sa parehong klase. Isaalang-alang ang halimbawa sa aming klase Pares: klase Pair . Narito kami ay sabihin sa compiler na ang uri T ay maaaring maging di-makatwirang, at V-type ang dapat na alinman sa T-type o isa sa mga subclasses.

Nililimitahan ang "bottom" ay eksakto sa parehong paraan, ngunit sa halip na ang salita ay umaabot sa baybayin ang salitang super. Iyon ay nauuri klase Pair nagsasabi na sa halip na T ay maaaring substituted o isang ArrayList, o anumang klase o interface na ito inherits.

Generic pamamaraan Java at constructor

Sa Java, paglalahat maaaring ilapat hindi lamang sa klase, kundi pati na rin mga pamamaraan. Halimbawa, ang isang pangkaraniwang paraan ay maaaring ipinahayag sa isang regular na silid-aralan.

Tulad ng nakikita sa figure sa itaas, ang ad generalised pamamaraan ay hindi malaki makitungo. Sapat na bago ang return uri ng isang paraan upang ilagay ang anggulo bracket at tukuyin ang mga parameter uri sa kanila.

Kung ang lahat ng bagay ay tapos na katulad sa ang constructor:

Braket anggulo sa kasong ito ilagay bago ang pangalan ng taga-disenyo, dahil wala siyang bumalik halaga. Ang resulta ng parehong mga programa ay magiging:

integer

tali

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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