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

Јава генеричка: опис и методи

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

Факт е дека пред воведувањето на генерика во Јава генерички код може да се создаде, не само во однос на референтната Тип на објект. Таквите врски можат да бидат доделени на некој објект. Впрочем, класи во Java се имплицитни наследници класа објект. Сепак, овој пристап е потенцијален извор на многу грешки поврзани со типови на безбедноста во очигледна пренамена на објектот од објект до целта тип. Кога се користи генерализации сите фрла се врши имплицитно и автоматски, дури и елиминирање на можноста за грешки.

Јава генеричка: опис и пример

Да разгледаме еден едноставен пример за примена на генерализација на редовната настава во сликата подолу. А потоа продолжи со детален преглед на сите суптилностите и нијанси на Јава генерички.

Обрни внимание на начинот на кој се јавува декларација класа пар. Веднаш по името на класата, отворен аглести загради, што укажува на буквата Т. Тоа е еден вид на полнење, која е во процес на создавање на пример на оваа класа ќе биде заменет од страна на посебен вид. Тоа изгледа како што следува: Пар OBJ = new пар (). Треба да се напомене дека, наместо на Т да наведете било која буква, но, како по правило, користете Т, V или Е.

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

Кога класа е прогласена во таков начин, а потоа во неговото тело, наместо на одредени видови на области, линкови, предмети вратени од страна на методи можете да го користите тоа писмо. Од Т кога создавање на класата објект се заменува со конкретен тип, првиот и вториот полиња во овој случај ќе биде на Integer тип.

По логиката на аргументи и firstItem secondItem, се осврна на соодветен конструктор исто така, мора да биде од типот цел број или подгрупа. Ако се обидете да се пренесе на податочен тип, кој е различен од она што беше наведен при создавањето на објектот, компајлерот нема да дозволиме оваа грешка. Така, аргументите конструктор кога објектот ќе биде како што следува: Пар OBJ = new пар <> (нов Цел Број (1), нови Цел Број (2)). Истото важи и за аргументите и методи setFirst setSecond. И како што сте веројатно претпостави, методи getFirst getSecond и ќе се врати на вредност од типот цел број.

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

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

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

Некои функции на генерализации

Пред да оди понатаму, тоа треба да се напомене дека Јава компајлерот не се создаде различни верзии на пар класата. Всушност, во процесот на изготвување генерализирана тип сите информации што се брише. Наместо тоа, ќе донесе соодветни видови, создавање на специјална верзија на класа пар. Сепак, во програмата се уште е само генерички верзија на класата. Овој процес се нарекува во Java тип Генерички чистење.

Забелешка важен момент. Линкови до различни верзии на истиот Јава генерички класа не може да укажуваат на еден и ист објект. Тоа е, да претпоставиме дека има две врски: Пар obj1 и пар <Двоен> obj2. Како резултат на тоа, во согласност obj1 = obj2 грешка. Иако и двете променливи се од типот пар <Т>, предметите на кои се однесуваат, се различни. Ова е одличен пример за видовите на безбедност во Java генерички.

Ограничувања на генерички класи

Важно е да се знае дека генерализации можат да се применуваат само за референца видови, тоа е да се помине параметри генерички класа Јава аргумент мора да биде тип класа. не може да се пренесе овие едноставни видови, како што се, на пример, двојно или долго,. Со други зборови, следнава линија декларација класа пар не е дозволено: Пар OBJ. Сепак, ова ограничување не е сериозен проблем, бидејќи постои соодветна обвивка Java класа за секоја примитивен тип. Поточно кажано, ако пар класата сакате да капсулирало цел број и Булова вредност avtoupakovka прави се за вас: Пар <цел број, Булова> OBJ = new пар <> (25, точно).

Уште едно сериозно ограничување е неможноста да се создаде еден пример од типот на параметарот. На пример, следнава линија ќе предизвика грешка компилација: T = првиот нов T (). Ова е очигледно, затоа што не се знае однапред дали аргумент донесе целосна или апстрактни класа, па дури и интерфејс. Истото важи и за создавање на низи.

ограничени видови

Доста често постојат ситуации кога тоа е неопходно да се ограничи на листата на видови кои можат да се пренесат како аргумент за Јава генерички класа. Дозволете ни да се претпостави дека во нашата класа пар сакаме да капсулирало само нумеричките вредности за повеќе математички операции на нив. За да го направите ова, ние треба да се дефинира горната граница од типот на параметарот. Тоа се остварува со помош на суперкласа реклами наследи сите аргументи донесен во аглести загради. Тоа ќе изгледа како што следува: класа пар <Т протега Број>. На овој начин, компајлерот утврди дека наместо на параметарот Т може да биде супституиран или број класа или една од нејзините поткласи.

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

Ограничување на "дното" е токму на ист начин, но наместо зборот се протега да се пишува зборот супер. Кој е класифициран класа пар <Т супер ArrayList> вели дека наместо Т може да биде заменет или ArrayList, или било која класа или интерфејс што го наследува.

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

Во Јава, генерализации не може да се применува само на класи, но, исто така, методи. На пример, генерички метод може да се прогласи во редовна училница.

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

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

Аглести загради во овој случај се стави пред името на дизајнерот, бидејќи тој нема враќање вредност. Како резултат на двете програми ќе бидат:

цел број

стринг

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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