КомпютриПрограмиране

Java Generics: същност и методи

Като се започне с появата на езика Java е претърпял много промени, които несъмнено дадоха положителни моменти в неговата функционалност. Един от тези значителни промени е въвеждането на Java Generic или обобщения. Тази функционалност не само прави езика по-гъвкава и гъвкав, но и много по-безопасни от гледна точка на привеждане типове данни.

Факт е, че преди въвеждането на генеричните лекарства в Java родово код може да бъде създадена, не само по отношение на референтен тип Object. Тези връзки могат да бъдат причислени всеки обект. В крайна сметка, класове в Java са косвени наследници класа Object. Въпреки това, този подход е потенциален източник на много грешки, свързани с вида на сигурността в очевидната превръщането на един обект от обекта до целевия тип. При използване на обобщения всички отливки се изпълняват безусловно и автоматично, което премахва дори възможността за грешки.

Java Generics: описание и пример

Нека разгледаме един прост пример за прилагането на обобщаване на редовните занимания на фигурата по-долу. И след това се пристъпи към подробно разглеждане на всички тънкости и нюанси на Java Generic.

Обърнете внимание на начина, по който се случва, декларацията за клас Pair. Веднага след името на класа, отворени ъглови скоби, които са посочени буквата Т. Това е един вид на пълнител, който е в процес на създаване на модел на този клас ще бъде заменен от определен тип. Изглежда, както следва: Двойка <цяло число> OBJ = нов чифт <цяло число> (). Трябва да се отбележи, че вместо Т да посочите всяка буква, но като правило, използвайте T, V или E.

Забележка: като се започне с осма версия на Java, уточняване на целевата тип при декларирането на препратка ъглови скоби в конструктора може да бъде оставено празно. Така например може да бъде пренаписана както по-горе: Двойка <цяло число> OBJ = нов чифт <> ().

Когато един клас е обявен по такъв начин, а след това в тялото му, а не специфични видове полета, връзки, предмети, върнати от методите, които могат да използват това писмо. Тъй T при създаването на обект клас се заменя от определен тип, първа и втора области в този случай ще бъде от цяло число тип.

Следвайки логиката на аргументите и firstItem secondItem, посочена подходящата конструктора трябва да бъде от тип Integer или подклас. Ако се опитате да предава тип данни, който е различен от това, което е било посочено при създаване на обект, компилаторът няма да остави тази грешка. По този начин, когато аргументи конструктора обект ще бъде както следва: Двойка <цяло число> OBJ = нов чифт <> (нов цяло число (1), нов цяло число (2)). Същото важи и за аргументите и методите setFirst setSecond. И както вероятно сте се досетили, методи getFirst getSecond и ще върне стойност от тип Integer.

Обобщена с няколко параметри видове клас

В общи класове също могат да декларират няколко параметъра от типа, който се помещава в ъглови скоби със запетая. Преработен чрез случай Pair клас е представен по-долу.

Както можете да видите, като при създаването на инстанция на този клас в ъглови скоби трябва да посочат един и същ брой видове като параметри. Ако сте запознати с този тип структура данни като картата, можете да видите, че тя използва точно същия принцип. Там първият аргумент определя типа на ключа, а вторият - от типа на стойност. Трябва да се отбележи, че видовете предава, когато един обект аргументи могат да се припокриват. Например, след обява Pair клас инстанция е абсолютно прав: Чифт OBJ.

Някои функции на обобщения

Преди да отидат по-далеч, трябва да се отбележи, че Java компилаторът не създава различни версии на двойката клас. В действителност, в процеса на съставянето на обобщен вид цялата информация се изтрива. Вместо това, да ви донесе подходящите видове, създаване на специална версия на класа двойка. Въпреки това, в програмата има още само родово версия на класа. Този процес се нарича в Java тип Generic почистване.

Имайте предвид един важен момент. Връзки към различни версии на един и същ Java родово класа не могат да сочат към един и същ обект. Това е, предполагам, че имаме две връзки: Двойка obj1 и Чифт obj2. Следователно, в съответствие obj1 = obj2 грешка. Въпреки че и двете променливи са от тип двойка , на обектите за които се отнасят, са различни. Това е отличен пример за видовете сигурност в Java Generic.

Ограничения за генерични класове

Важно е да се знае, че обобщения могат да се прилагат само за обръщение към видове, които трябва да премине параметри общ клас Java аргумент трябва да е тип клас. не могат да се прехвърлят Тези прости видове, като например, двойни или дълги. С други думи, следния ред декларацията за клас Pair не е позволено: Чифт <вътр> OBJ. Това ограничение обаче не е сериозен проблем, тъй като има съответен Java обвивка клас за всеки примитивен тип. Строго погледнато, ако двойката клас искате да побере в себе си число и Булева стойност avtoupakovka прави всичко за вас: Чифт OBJ = нов чифт <> (25, вярно).

Друг сериозен ограничение е невъзможността да се създаде например от типа параметър. Например, следният ред ще доведе до грешка компилация: Т = първата нова T (). Това е очевидно, защото не се знае предварително дали аргумент пълен клас или абстрактна или дори интерфейс. Същото важи и за създаване на масиви.

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

Доста често има ситуации, когато е необходимо да се ограничи списъка с видове, които могат да бъдат прехвърлени като аргумент за Java общ клас. Да приемем, че в нашия клас Pair искаме да капсулират само цифровите стойности на допълнителни математически операции върху тях. За да направите това, което трябва да се определи горна граница на типа на параметъра. Той се реализира с помощта на един суперкласа обяви наследени всички аргументи преминали в ъглови скоби. Тя ще изглежда по следния начин: клас Pair . По този начин, компилаторът установи, че вместо на параметър Т може да бъде заместен или номер клас или една от неговите подгрупи.

Това е често срещан рецепция. Такива ограничения често се използват за осигуряване параметри тип съвместимост в един и същи клас. Да разгледаме пример в нашия клас Pair: клас Pair . Тук ние каже на компилатора, че тип T може да бъде произволно, и V тип трябва да бъде или от тип Т или една от неговите подкласове.

Ограничаването на "дъното" е точно по същия начин, но вместо думата се простира до правописа на думата супер. Това е класифицирана клас Pair казва, че вместо Т може да бъде заместен или ArrayList, или който и да е клас или интерфейс, който го наследява.

Общи методи на Java и конструктори

В Java обобщения могат да не се прилагат само към класовете, но също така и методи. Например, общ метод може да бъде обявена в редовна класна стая.

Както се вижда на фигурата по-горе, методът на обява генерализирана не е голяма работа. Достатъчно преди типа връщане на метод, който да сложи ъглови скоби и уточни параметрите на типа в тях.

Ако всичко е направено подобно на строителя:

Ъглови скоби в този случай, поставени пред името на дизайнера, защото той няма никаква стойност за връщане. В резултат на двете програми ще бъдат:

цяло число

низ

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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