KompjuteraProgramimi

Java Generics: Përshkrimi dhe metodat

Duke filluar me shfaqjen e gjuhës Java ka pësuar shumë ndryshime, të cilat pa dyshim sollën momente pozitive në funksionalitetin e saj. Një nga këto ndryshime të rëndësishme është futja e Java gjenerik ose përgjithësime. Ky funksionalitet jo vetëm të bëjë gjuha më fleksibile dhe të gjithanshëm, por edhe shumë më të sigurt për sa i përket sjelljes llojet e të dhënave.

Fakti është se para futjes së gjenerikë në kodin Java përgjithshme mund të krijohet, jo vetëm në aspektin e llojit të referencës Object. Lidhje të tilla mund të caktohet ndonjë objekt. Pas të gjitha, klasa në Java janë nënkuptuar trashëgimtarë të klasit Object. Megjithatë, kjo qasje është një burim potencial i shumë gabimeve që lidhen me llojet e sigurisë në konvertimin e dukshme të një objekti nga objekti me llojin synuar. Kur përdorni përgjithësimet gjitha hedh janë kryer në mënyrë implicite dhe automatikisht, duke eliminuar madje edhe potencialin për gabime.

Java Generics: Përshkrimi dhe shembulli

Le të konsiderojmë një shembull të thjeshtë e aplikimit të përgjithësimit në klasat e rregullta në figurën më poshtë. Dhe pastaj do të vazhdojë për një ekzaminim të detajuar të të gjitha hollësitë dhe nuancat e Java gjenerike.

Kushtoj vëmendje për mënyrën në të cilën deklarata klasë ndodh Pair. Menjëherë pas emrit të klasës, kllapa të hapura kënd, e cila tregoi shkronjën T. Kjo është një lloj filler, e cila është në proces të krijimit të një shembull të kësaj klase do të zëvendësohet nga një lloji të veçantë. Ajo duket si më poshtë: Pair obj = ri Pair (). Duhet të theksohet se në vend të T mund të specifikoni ndonjë letër, por, si rregull, përdorni T, V ose E.

Shënim: duke filluar me versionin e tetë të Java, duke specifikuar llojin e synuar, kur duke deklaruar kllapa kënd reference në konstruktor mund të lihet bosh. Kështu shembull mund të rishkruhen si më sipër: palë obj = ri Pair <> ().

Kur një klasë deklarohet në mënyrë të tillë, atëherë në trupin e tij në vend të llojeve të veçanta të fushave, lidhjet, objekteve të kthyera nga metodat që ju mund të përdorni atë letër. Që T kur të krijuar objekti klasë është zëvendësuar nga një lloj të veçantë, fusha të parë dhe të dytë në këtë rast do të jetë i tipit Integer.

Pas logjikën e argumenteve dhe firstItem secondItem, referuar konstruktor duhur duhet të jetë e tipit Integer ose nënklasë. Nëse ju përpjekje për të transmetuar një lloj të të dhënave që është i ndryshëm nga ajo që ishte specifikuar kur të krijuar një objekt, përpiluesit nuk do të le këtë gabim. Kështu, argumentet ndërtuesi, kur një objekt do të jetë si më poshtë: palë obj = ri Pair <> (Integer e re (1), Integer i ri (2)). E njëjta gjë vlen edhe për argumentet dhe metodat setFirst setSecond. Dhe si ju keni mendoi ndoshta, metodat getFirst getSecond dhe do të kthehet një vlerë prej tipit Integer.

Përgjithësuar me disa parametrave lloje të klasës

Në klasat e përgjithësuar gjithashtu mund të deklarojë parametrat e shumta të llojit që janë vendosur në kllapa kënd me një presje. Redesigned nga një rast klasë Pair është paraqitur më poshtë.

Siç mund ta shikoni, kur ju krijoni një shembull të kësaj klase në kllapa kënd duhet të tregojë të njëjtin numër të llojeve si parametra. Nëse jeni të njohur me këtë lloj të strukturës së të dhënave si një hartë, ju mund të shihni se ajo përdor pikërisht njëjtin parim të. Atje, argumenti i parë përcakton llojin e çelësit, dhe e dyta - llojin e vlerës. Duhet të theksohet se llojet e transmetueshme, kur një objekt argumente mund të përputhen. Për shembull, në vijim ad Pair klasa e shkalles se është absolutisht e saktë: Pair obj.

Disa tipare të përgjithësimeve

Para se të shkojnë më tej, duhet të theksohet se përpiluesit Java nuk krijon versione të ndryshme e palë klasës. Në fakt, në procesin e hartimit të një lloji të përgjithësuar të gjithë informacionin që fshihet. Në vend të kësaj, ju sjellë llojet e duhura, duke krijuar një version të veçantë të klasës Pair. Megjithatë, në program nuk është ende vetëm një version gjenerik i klasës. Ky proces quhet në Java llojin e pastrimit Generic.

Shënim një pikë të rëndësishme. Lidhje me versione të ndryshme të së njëjtës klasë java gjenerik nuk mund të tregojnë për një dhe të njëjtin objekt. Kjo është, mendoj ne kemi dy lidhje: palë obj1 dhe Pair obj2. Si pasojë, në përputhje obj1 = obj2 një gabim. Edhe pse të dy variablat janë të tipit Pair , objektet për të cilat ata i referohen, janë të ndryshme. Ky është një shembull kryesor i llojeve të sigurisë në Java gjenerike.

Kufizimet në klasa të përgjithshme

Është e rëndësishme të dini se përgjithësime mund të aplikohet vetëm për referencë lloje, që është për të kaluar parametrat generic klasit java argumentin duhet të jetë një lloj klasë. Këto lloje të thjeshta, të tilla si, p.sh., të dyfishtë apo të gjatë, nuk mund të transferohet. Me fjalë të tjera, vija pas shpalljes klasë Pair nuk lejohet: Pair obj. Megjithatë, ky kufizim nuk është një problem serioz, pasi ka një korrespondues klasë Java këmishë për secilin lloj primitive. Të thuash të drejtën, nëse klasa Pair ju doni për të përmbledhur një numër të plotë dhe Boolean vlera avtoupakovka bën gjithçka për ju: Pair obj = ri Pair <> (25, e vërtetë).

Një tjetër kufizim serioz është paaftësia për të krijuar një shembull të llojit parametër. Për shembull, vija vijim do të shkaktojë një gabim kompilimit: T = T e parë të re (). Kjo është e qartë, për shkak se ju nuk e dini paraprakisht se një argument kaloi një klasë të plotë ose abstrakte, apo edhe ndërfaqe. E njëjta gjë vlen edhe për krijimin e vargjeve.

llojet kufizuara

Mjaft shpesh ka situata kur është e nevojshme për të kufizuar listën e llojeve që mund të kalojë si një argument për të Java klasë gjenerike. Le të supozojmë se në Pair tonë klasës duam të përmbledhur vetëm vlerat numerike për operacionet e mëtejshme matematikore mbi ta. Për ta bërë këtë ne kemi nevojë për të përcaktuar kufirin e sipërm të tipit parametër. Kjo realizohet me anë të një reklama superklas trashëguara të gjitha argumentet kaluar në kllapa kënd. Ajo do të duket si më poshtë: Klasa Pair . Në këtë mënyrë, përpiluesit konstaton se në vend të T parametri mund të zëvendësohet ose të klasës Numri ose një nënklasë e saj.

Kjo është një pritje e zakonshme. kufizime të tilla janë përdorur shpesh për të siguruar parametrat tipit compatibility në një dhe të njëjtën klasë. Konsideroni shembullin në klasë Pair tonë: klasë Pair . Këtu ne tregoni përpilues se tipit T mund të jetë arbitrare, dhe tipi V duhet të jetë ose të tipit T ose një nga subclasses saj.

Kufizimi "fund" është pikërisht në të njëjtën mënyrë, por në vend të fjalës shtrihet për të përcaktuar fjalën super. Kjo klasë është klasifikuar Pair thotë që në vend të T mund të zëvendësohet ose një ArrayList, apo ndonjë klasë apo ndërfaqe që trashëgon.

Metodat e përgjithshme Java dhe Ndërtuesve

Në Java, përgjithësimet mund të aplikohet jo vetëm për klasat, por edhe metodat. Për shembull, një metodë të përgjithshme mund të shpallet në një klasë të rregullt.

Siç shihet në figurën e mësipërme, metoda ad përgjithësuar nuk është e madhe. Mjaft para lloji kthimi i një metodë për të vënë kllapa kënd dhe të përcaktojë parametrat lloji në to.

Nëse çdo gjë është bërë në mënyrë të ngjashme për konstruktor:

Kllapat këndore në këtë rast të vënë para emrit të projektuesi, sepse ai nuk ka vlerë të kthimit. Rezultati i dy programeve do të jenë:

numër i plotë

varg

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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