ArvutidProgrammeerimine

Java Generics: kirjeldus ja meetodid

Alustades välimus Java keel on läbinud palju muutusi, mis kahtlemata on andnud positiivseid hetki oma funktsionaalsuse. Üks neist olulised muutused on kasutusele Java Generic või üldistusi. See funktsioon ei ole ainult teha keele paindlikumaks ja mitmekülgne, kuid ka palju turvalisem poolest tuues andmetüüpe.

Fakt on, et enne kasutuselevõttu geneeriliste Java üldised koodi saaks luua, mitte ainult seoses tüübiesindaja objekt. Sellised lingid saab määrata mis tahes objekti. Lõppude lõpuks, klasside Java on kaudne objekt klassi pärijad. Kuid selline lähenemine on võimalik allikas palju vigu, mis on seotud turvalisuse tüüpe ilmne konverteerimise objekti eseme siht tüüp. Kui kasutate üldistusi kõik heidab läbi kaudselt ja automaatselt, kõrvaldades isegi potentsiaali vigu.

Java Generics: kirjeldus ja näiteks

Mõelgem lihtne näide kohaldamise üldistust tavaklassides alloleval joonisel. Ja siis edasi üksikasjalik uurimine kõiki peensusi ja nüansse Java Generic.

Pöörake tähelepanu, kuidas klassi deklaratsiooni toimub sidumine. Kohe pärast klassi nimi, avatud nurksulud, mis näitas, et kirja T. See on omamoodi täiteaine, mis on loomise protsessis näiteks selle klassi asendatakse konkreetset tüüpi. Tundub järgmiselt: sidumine obj = uue paari (). Tuleb märkida, et selle asemel, et T on võimalik määrata iga tähe, kuid reeglina kasutada T, V või E.

Märkus: alustades kaheksanda versiooni Java, täpsustades sihtimistüübis deklareerimisel viide nurkklambriga ehitaja saab tühjaks. Nii näiteks saab väljendada nagu ülal: sidumine obj = new sidumine <> ().

Kui klass on deklareeritud nii, siis tema keha asemel teatud tüüpi väljad, lingid, objektide tagastatud meetodeid, mida saab kasutada, et kirja. Kuna T loomisel klassi objekt asendatakse teatud tüüpi, esimene ja teine väljad sel juhul olema sama tüüpi Integer.

Loogikat järgides argumente ja firstItem secondItem osutatud asjakohased ehitaja peab olema tüübiga Integer või alamklassi. Kui üritate edastab andmed tüüp, mis erineb sellest, mida oli loomisel määratud objekti, koostaja ei lase seda viga. Seega argumendid konstruktori kui objekt on järgmine: Paar obj = new sidumine <> (uus Integer (1), uus Integer (2)). Sama kehtib ka põhjendusi ja meetodeid setFirst setSecond. Ja nagu te olete ilmselt arvasid, meetodite getFirst getSecond ja naaseb väärtus tüüpi Integer.

Üldistatud mitme parameetrid klassi tüüpi

Üldistatud klasse võib ka kuulutada mitmeid parameetreid sellist tüüpi, mis on seatud noolsulgudega koos eralda. Ümberkujundatud mille puhul sidumine klassi on esitatud allpool.

Nagu näete, kui loote näiteks selle klassi noolsulgudega peaks näitama sama arvu tüüpi parameetrid. Kui te olete tuttav seda tüüpi andmestruktuuri kaart, siis näeme, et ta kasutab täpselt sama põhimõtet. Seal esimene argument määrab võtme tüüp ja teine - tüüpi väärtus. Tuleb märkida, et liiki edastatakse kui objekti argumendid võivad kattuda. Näiteks järgmine reklaam sidumine klassi astmes on täiesti õige: Paar obj.

Mõned funktsioonid üldistusi

Enne jätkamist tuleb märkida, et Java kompilaator ei saa luua erinevaid versioone klassi sidumine. Tegelikult protsessi koostamisel üldistatud tüüp kõik andmed kustutatud. Selle asemel, siis tuua asjakohased liigid, luues eriversiooni sidumine klassi. Kuid programm on veel ainult üldine versioon klassi. Seda protsessi nimetatakse Java Generic puhastus tüüp.

Märkus oluline punkt. Lingid erinevaid versioone sama java geneeriline klass ei saa osutada ühele ja samale objektile. See on oletame meil on kaks lingid: Paar obj1 ja sidumine obj2. Seega kooskõlas obj1 = obj2 vea. Kuigi mõlemad muutujad tüüpi sidumine , objektid, millele nad viitavad, on erinevad. See on parim näide sellest, millist liiki turvalisuse Java Generic.

Piirangud geneeriliste klasside

On oluline teada, et üldistusi saab rakendada ainult viide tüüpi, mis on edasi parameetrid geneeriline klass java argument olema klassi tüüp. Need lihtsad tüüpi, nagu näiteks kahe- või pikk, ei saa üle. Teisisõnu, järgmine rida sidumine klassi deklaratsiooni ei ole lubatud: Paar obj. Kuid see piirang ei ole tõsine probleem, sest on olemas vastav Java ümbris klassi iga primitiivne tüüpi. Rangelt võttes kui klassi sidumine soovite kapseldada täisarv ja tõeväärtuse avtoupakovka teeb kõike teile: Paar obj = uue paari <> (25, true).

Teine tõsine piirang on võimetus luua näiteks parameetri tüüp. Näiteks järgmine rida paneb kompileerimisviga: T esimeses = uus T (). See on ilmselge, sest sa ei tea ette, kas argument sooritanud täieliku klassi või abstraktne või isegi liides. Sama kehtib luua massiivid.

piiratud tüüpi

Sageli on olukordi, kui on vaja piirata liikide loetelu, mida saab edasi argumendina Java geneeriline klass. Oletame, et meie klassi sidumine tahame kapseldada ainult numbrilise väärtuse edasise tehete neid. Selleks peame määratlema ülempiiri parameetri tüüp. See on realiseeritud abil ülemklassi kuulutused päritud kõik argumentide noolsulgudega. See näeb välja järgmiselt: klass sidumine . Sel viisil koostaja leiab, et selle asemel parameetri T võib olla asendatud või arv tasemega või ühe selle alamklassiks.

See on ühine vastuvõtt. Sellised piirangud kasutatakse sageli tagada ühilduvust tüüpi parameetreid ühe ja sama klassi. Vaatleme näiteks meie klassi sidumine: klass sidumine . Siin me öelda kompilaator, et tüüp T võib olla meelevaldne ja V tüüp peab olema kas T tüüpi või ühe selle alamklassiks.

Piiramine "alt" on täpselt samamoodi, kuid selle asemel sõna ulatub kirjutada sõna super. See on klassifitseeritud klassi sidumine ütleb, et selle asemel, et T võib olla asendatud või ArrayList, või mis tahes klassi või liidest, et see pärib.

Generic Java meetodid ja konstruktorid

Java, üldistusi saab rakendada mitte ainult klassidesse, kuid ka meetodid. Näiteks üldine meetod võib deklareeritud regulaarselt klassiruumis.

Nagu joonisel näha eespool reklaami üldistatud meetod ei ole suur asi. Aitab enne tüübi tagastamise meetod panna nurksulud ja täpsustada, millist tüüpi parameetreid neid.

Kui kõik on tehtud sarnaselt ehitaja:

Komnurksulud sel juhul panna enne nime disainer, sest ta ei ole tagastatav väärtus. Tulemuseks mõlema programmi saab:

täisarv

nöör

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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