KompyutaProgramu

Jenereta za Java: Maelezo na Njia

Tangu kuanzishwa kwake, lugha ya Java imepata mabadiliko mengi, ambayo, bila shaka, yalileta sifa nzuri kwa utendaji wake. Mabadiliko makubwa hayo ni kuanzishwa kwa Java Generic au generalization. Utendaji huu umefanya lugha si rahisi zaidi na inayofaa, lakini pia ni salama sana kwa kupunguza aina za data.

Ukweli ni kwamba kabla ya kuanzishwa kwa generic, kanuni ya generic katika Java inaweza kuundwa, tu na viungo ya Object aina. Viungo vile vinaweza kupewa kitu chochote. Baada ya yote, madarasa yote katika Java ni wazao wa kikundi cha Object. Hata hivyo, mbinu hii ni chanzo cha makosa mengi ya usalama wakati unapobadili wazi kitu kutoka kwa Kitu hadi aina ya lengo. Wakati generalizations hutumiwa, wote hupoteza hufanyika kikamilifu na moja kwa moja, ambayo huhusisha hata uwezekano wa uwezekano wa makosa.

Jenereta za Java: maelezo na mfano

Hebu tuangalie mfano rahisi wa kutumia generalization kwa darasa la kawaida katika takwimu hapa chini. Na tu basi tutaendelea kwa uchunguzi wa kina wa hila zote na nuances ya Java Generic.

Tazama jinsi darasa la Pair lilitangazwa. Haki baada ya jina la darasani, mabano ya angle yanafunguliwa, ambapo barua T inaonyeshwa. Ni aina ya mahali pa kuweka nafasi ambayo itabadilishwa na aina fulani wakati wa kujenga mfano wa darasa hili. Inaonekana kama hii: Pair obj = Pair mpya (). Ikumbukwe kwamba badala ya T, unaweza kutaja barua yoyote, lakini, kama sheria, tumia T, V au E.

Kumbuka: Kuanzia na toleo la nane la Java, akifafanua aina ya lengo wakati kiungo kinatangazwa, unaweza kuondoka mabaki ya angle ndani ya mtengenezaji tupu. Hivyo mfano hapo juu unaweza kuandikwa upya kama ifuatavyo: Pair obj = Pair mpya <> ().

Wakati darasa linatangazwa kwa njia hii, basi katika mwili huu, badala ya aina maalum za mashamba, marejeo, na mbinu zinazorejeshwa kwa njia, unaweza kutumia barua hii. Kwa sababu T inabadilishwa na aina fulani wakati wa kuunda kitu cha darasa, mashamba ya kwanza na ya pili katika kesi hii itakuwa ya aina ndogo.

Kufuatilia mantiki, hoja ya kwanza na ya pili, yaliyotangulia kwa mtengenezaji mchanganyiko, lazima pia iwe ya aina ndogo au kikundi chake. Ikiwa unajaribu kupitisha aina ya data ambayo ni tofauti na yale yaliyowekwa wakati kitu kilichoundwa, mtayarishaji hawezi kuruka kosa hili. Kwa hivyo, mtengenezaji na hoja wakati wa kuunda kitu atakuwa na fomu ifuatayo: Pair obj = mpya Pair <> (mpya Integer (1), mpya Integer (2)). Hali hiyo inatumika kwa hoja kwa njia za kwanza na kuwekaSecond. Na kama vile tayari umebadiria, mbinu za GetFirst na getSecond zitarudi maadili ya aina ya Integer.

Darasa la generic yenye vigezo kadhaa vya aina

Katika madarasa ya generic, unaweza pia kutangaza vigezo vingi vya aina ambavyo vinatajwa katika mabano ya angle, kutengwa na vitambaa. Darasa la jozi kwa kesi hii linawasilishwa katika takwimu hapa chini.

Kama unaweza kuona, wakati wa kujenga mfano wa darasa kama hiyo, idadi sawa ya aina kama vigezo vinavyopaswa kutajwa katika mabano ya angle. Ikiwa unajua na aina kama ya ramani kama Ramani, basi unaweza kuona kwamba kanuni hiyo hutumiwa huko. Huko, hoja ya kwanza inafafanua aina ya ufunguo, na pili hufafanua aina ya thamani. Ikumbukwe kwamba aina ya hoja zilizotolewa kwa uumbaji wa vitu zinaweza kuwa sawa. Hivyo, tamko lafuatayo la darasa la Pair ni sahihi kabisa: Jozi obj.

Baadhi ya vipengele vya generalizations

Kabla ya kuendeleza zaidi, ni lazima ieleweke kwamba compiler Java haina kujenga matoleo yoyote tofauti ya darasa Pair. Kwa kweli, wakati wa mchakato wa kukusanya, habari zote kuhusu aina ya kawaida hufutwa. Badala yake, aina zinazofanana zinaponywa, na kuunda toleo maalum la darasa la Pair. Hata hivyo, mpango yenyewe bado una toleo la jumla la darasa hili. Utaratibu huu unaitwa katika aina ya Jenereta ya Jumuiya ya kusafisha.

Hebu tuangalie jambo muhimu. Viungo vya matoleo tofauti ya darasa moja la java la kawaida huwezi kuelekeza kitu kimoja. Hiyo ni, hebu sema tuna viungo viwili: Pair obj1 na Pair obj2. Kwa hiyo, hitilafu hutokea kwenye mstari obj1 = obj2. Ingawa vigezo vyote viwili vya aina ya Pair , vitu vinavyotajwa ni tofauti. Hii ni mfano wazi wa usalama wa aina katika Java Generic.

Vikwazo vinavyowekwa kwenye madarasa ya jumla

Ni muhimu kujua kwamba generalizations inaweza kutumika tu kwa aina ya kumbukumbu, yaani, hoja iliyotolewa kwenye jadi ya jadi argument darasa lazima lazima aina ya darasa. Aina hizo rahisi kama, kwa mfano, mara mbili au za muda mrefu, haziwezi kupitishwa. Kwa maneno mengine, mstari wafuatayo wa tamko la darasa la Pair halali: Pair obj. Hata hivyo, kiwango hiki sio tatizo kubwa, tangu Java ina darasa la wrapper sambamba kwa kila aina ya primitive. Ukizungumza kikamilifu, ikiwa unataka kuingiza integer na thamani ya mantiki katika darasa la Pair, pakiti ya auto itakufanyia kila kitu: Pair obj = Pair mpya <> (25, kweli).

Kikwazo kingine kikubwa ni kutowezekana kwa kujenga mfano wa parameter ya aina. Kwa hivyo, mstari wafuatayo utasababisha kosa la kukusanya: T kwanza = mpya T (). Hii ni dhahiri, kwani hujui mapema kama darasa kamili au interface isiyo ya kawaida itapitishwa kama hoja. Vile vile huenda kwa kuunda vitu.

Aina ndogo

Mara nyingi kuna hali ambapo ni muhimu kupunguza orodha ya aina ambazo zinaweza kupitishwa kama hoja kwenye darasa la jenasi la java. Hebu tufikiri kwamba katika darasa la jozi tunataka kuingiza maadili ya namba tu kwa ajili ya shughuli zaidi za hisabati juu yao. Ili kufanya hivyo, tunahitaji kuweka mipaka ya juu ya parameter ya aina. Hii inatekelezwa kwa kutumia tangazo la superclass lililorithiwa na hoja zote zilizopatikana katika mabano ya angle. Itaonekana kama hii: darasa Pair . Kwa njia hii, compiler hujifunza kuwa badala ya parameter T, unaweza kubadilisha nafasi ya Nambari au moja ya vikundi vyake.

Hii ni mbinu ya kawaida. Vikwazo vile mara nyingi hutumiwa kuhakikisha utangamano wa vigezo vya aina katika darasa sawa. Fikiria mfano juu ya darasa yetu ya jozi: darasa Pair . Hapa tunasema mtayarishaji aina ya T inaweza kuwa kiholela, na aina ya V lazima iwe aina ya T au moja ya vikundi vyake.

Kizuizi "kutoka chini" kinatokea kwa njia sawa, lakini badala ya neno linaendelea, neno super limeandikwa. Hiyo ni, tamko la darasa la Pair linaonyesha kuwa badala ya T, ama ArrayList au darasa lolote au interface ambayo inamiliki inaweza kugeuzwa.

Mbinu za Generic Java na Wajenzi

Katika jenereta za Java zinaweza kutumiwa si kwa heshima tu kwa madarasa, bali pia mbinu. Hivyo, mbinu ya jumla inaweza kutangaza katika darasa la kawaida.

Kama unaweza kuona katika takwimu hapo juu, hakuna kitu ngumu katika tamko la njia ya jumla. Ni vya kutosha kuweka mabani ya angle kabla ya aina ya kurudi aina na kutaja vigezo vya aina ndani yao.

Katika kesi ya mtengenezaji, kila kitu kinafanyika kwa njia ile ile:

Mabango ya angili katika kesi hii huwekwa kabla ya jina la mtengenezaji, kwani hairudi thamani yoyote. Matokeo ya kazi ya mipango yote mbili itakuwa:

Kipengee

Kamba

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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