КомпјутериПрограмирање

Јава Генерици: опис и методе

Почевши са појавом Јава језика је прошла кроз много промена, што несумњиво довели позитивне тренутке у својој функционалности. Једна од тих значајних промена је увођење Јава Генериц или генерализације. Ова функционалност не само да је језик флексибилнији и разноврсна, али и много сигурнији у смислу приближавања типове података.

Чињеница је да би се створила пре увођења генерика у Јава генеричке коду, не само у погледу типа референтни објекат. Такве везе могу доделити било који објекат. На крају крајева, класе у Јави су имплицитне објекта класе наследници. Међутим, овај приступ је потенцијални извор многих грешака везаних за типовима безбедносних у очигледној конверзију објекта из предмета на врсту циљног. Када користите генерализације сви одливци врше имплицитно и аутоматски, елиминисање чак потенцијал за грешке.

Јава Генерици: опис и пример

Размотримо једноставан пример примене генерализације редовне наставе на слици испод. А онда наставити са детаљним прегледом свих нијансама и нијансама Јава Генериц.

Обратите пажњу на начин на који је декларација класа настаје Паир. Одмах после имена класе, отворени угласте заграде, што је указивало на слова Т. То је врста пуниоца, која је у процесу креирања инстанце ове класе ће бити замењен специфичне врсте. То изгледа овако: Пара <интегер> ОБЈ = нови пар <Цео број> (). Треба напоменути да уместо Т може одредити било које слово, али, по правилу, користе Т, В или Е.

Напомена: почевши од осмог верзију Јава, наводећи тип циљне када проглашења референца угао заграде у конструктору могу бити остављена празна. Тако пример може се написати као горе: Паир <интегер> ОБЈ = нови пар <> ().

Када је класа проглашен на такав начин, онда у његовом телу, уместо одређених врста поља, линкова, објеката повратника од метода које можете да користите то писмо. Од Т приликом креирања објекат класе замењује одређеном типу, први и други поља у овом случају ће бити од типа Интегер.

Након логику аргумената и фирстИтем сецондИтем, такође морају бити типа Интегер или поткласе односи на одговарајући конструктору. Ако покушате да пренесе тип података који се разликује од онога што је наведено приликом креирања објекта, компајлер неће дозволити ту грешку. Дакле, аргументи конструктор када ће објекат бити следећи: Паир <Интегер> обј = нев Паир <> (нев Интегер (1), нев Интегер (2)). Исто важи и за аргументе и методе сетФирст сетСецонд. И као што већ претпостављате, методе гетФирст гетСецонд и да ће вратити вредност типа Интегер.

Генерализована са неколико параметара типовима класе

Уопштене наставе може прогласити вишеструке параметре типа који су подешени у угластим заградама зарезом. Редизајниран од случаја пар класа је представљен испод.

Као што можете да видите, када креирате инстанцу ове класе у угластим заградама треба да укаже на исти број типова као параметара. Ако сте упознати са овом врстом структуре података као Карта, можете видети да користи управо исти принцип. Тамо је први аргумент одређује врсту кључа, а други - тип вредности. Треба напоменути да су типови преноси моменту када се аргументи објекта могу преклапати. На пример, следећи оглас класа Паир инстанца је апсолутно тачна: Паир <Стринг, Стринг> обј.

Неке карактеристике уопштавања

Пре него што наставимо, треба напоменути да је Јава преводилац не ствара различите верзије класе Паир. У ствари, у процесу састављања генерализоване укуцате све информације се брише. Уместо тога, донети одговарајуће врсте, стварајући посебну верзију Паир класе. Међутим, у програму постоји још само генерички верзија класе. Овај процес се назива у Јава тип Буи чишћење.

Напомена важну тачку. Линкови за различите верзије исте јава генеричке класе не може да укаже на једном те истом објекту. То је, претпоставимо да имамо два линка: Пара <интегер> обј1 и Паир <доубле> обј2. Сходно томе, у складу обј1 = обј2 грешка. Иако су оба варијабле типа Паир <Т>, предмети на које се односе, су различити. Ово је први пример од типова безбедности у Јава Генериц.

Ограничења у општим класа

Важно је знати да се генерализације може применити само на типове референци, то је да прође параметре генериц класе јава аргумент мора бити тип класа. Ови једноставни типови, као што је, на пример, двокреветне или дуге, не могу преносити. Другим речима, следећи ред декларација цласс Паир није дозвољено: Паир <инт> обј. Међутим, ово ограничење није озбиљан проблем, јер постоји одговарајући Ава омотач класе за сваки примитивног типа. Стриктно говорећи, ако је класа Пар желите да обухвати цео број и Булова вредност автоупаковка ради све за вас: Пара <Цео број, Булова> ОБЈ = нови пар <> (25, труе).

Други озбиљан ограничење је немогућност да створи инстанцу типа параметра. На пример, следеће линија ће изазвати грешку компилацију: Т први = нев Т (). То је очигледно, јер не знате унапред да ли је аргумент донела пуну класу или апстрактно, или чак интерфејс. Исто важи и за креирање низова.

ограничени типови

Веома често постоје ситуације када је потребно да се ограничи списак врста које се могу прошли као аргумент за Јава генериц класе. Хајде да претпоставимо да смо у нашој класи Паир желе да обухвати само нумеричке вредности за даља математичких операција на њима. Да би то урадили морамо да дефинишемо горњу границу типа параметра. То се остварује помоћу а суперцласс огласа наслеђених све аргументе донете у угластим заградама. То ће изгледати овако: класа пар <Т ектендс број>. На овај начин, компајлер сматра да уместо параметар Т може бити супституисана или број класе или једну од његових подкласе.

Ово је уобичајена пријем. Таква ограничења се често користе да обезбеде параметрима типа компатибилност у једној и истој класи. Размотримо пример у нашој класи Паир: класа пар <Т в простире Т.>. Овде кажемо компајлер да је тип Т може бити произвољан, и тип В мора бити или Т тип или један од његових подврста.

Ограничава "дно" је потпуно исти начин, али уместо речи протеже се пише реч супер. То је класификован класа пар <Т Супер АрраиЛист> каже да уместо Т може бити супституисан или АрраиЛист, или било класу или интерфејс који је наследи.

Генериц Јава методе и конструктори

У Јави, уопштавања могу не примењују само на наставу, али и методе. На пример, генерички метод може бити проглашена у редовном разреду.

Као што се види на слици горе, оглас генерализована метода није велика ствар. Доста пре повратни тип метода ставити угао заграде и одредити параметре типа у њима.

Ако се све ради слично као конструктора:

Угао заграде у овом случају ставити испред имена дизајнера, јер он нема повратну вредност. Резултат оба програма биће:

цео број

низ

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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