CalculatoareProgramare

Java Generice: descriere și metode

Începând cu apariția limbajului Java a trecut printr-o mulțime de schimbări, care a adus, fără îndoială, momentele pozitive în funcționalitatea sa. Una dintre aceste schimbări semnificative este introducerea de Java generice sau generalizări. Această funcționalitate nu face numai limbajul mai flexibil și versatil, dar, de asemenea, mult mai sigur în ceea ce privește aducerea tipurile de date.

Faptul este că, înainte de introducerea generice în Java cod generic ar putea fi create, nu numai în ceea ce privește tipul de obiect de referință. Astfel de legături pot fi atribuite orice obiect. La urma urmei, clase în Java sunt implicite mostenitori din clasa Object. Cu toate acestea, această abordare este o sursă potențială de multe erori legate de tipurile de securitate în conversia aparentă a unui obiect de la obiect la tipul țintă. Atunci când se utilizează generalizări toate mulaje sunt efectuate în mod implicit și în mod automat, eliminând chiar și potențialul de erori.

Java Generice: descrierea și exemplul

Să considerăm un exemplu simplu de aplicarea de generalizare a claselor regulate în figura de mai jos. Și apoi trece la o examinare detaliată a tuturor subtilitățile și nuanțele Java generice.

Fiți atenți la modul în care are loc declarația de clasă pereche. Imediat după numele clasei, paranteze unghi deschis, care a indicat litera T. Este un fel de umplutură, care este în procesul de creare o instanță a acestei clase va fi înlocuit de un anumit tip. Se arată în felul următor: pereche obj = new Pair (). Trebuie remarcat faptul că, în loc de T poate specifica orice literă, dar, de regulă, utilizați T, V sau E.

Notă: începând cu a opta versiune a Java, specificând tipul țintă atunci când declararea paranteze unghiulare de referință în constructor poate fi lăsat gol. Deci, de exemplu, poate fi rescrisă ca mai sus: Pereche obj = new Pair <> ().

Atunci când o clasă este declarată în așa fel, apoi în corpul său în loc de anumite tipuri de câmpuri, link-uri, obiecte returnate de metodele pe care le puteți folosi scrisoarea. Deoarece T la crearea obiectului de clasă este înlocuit de un anumit tip, prima și a doua câmpuri în acest caz va fi de tip Integer.

Urmând logica argumentelor și firstItem secondItem, se face referire la constructorul adecvat trebuie să fie, de asemenea, de tip Integer sau subclase. Dacă încercați să transmită un tip de date, care este diferit de ceea ce a fost specificat la crearea unui obiect, compilatorul nu va lăsa această greșeală. Astfel, constructorul argumente atunci când un obiect va fi după cum urmează: Pereche obj = new Pair <> (new Integer (1), nou Integer (2)). Același lucru se aplică argumentele și metodele setFirst setSecond. Și, după cum probabil ați ghicit, metodele getFirst getSecond și va returna o valoare de tip Integer.

Generalizat cu mai mulți parametri tipuri de clasă

În clasele generalizate pot declara, de asemenea, mai mulți parametri de tipul celor care sunt stabilite între paranteze unghiulare cu o virgulă. Reproiectată de un caz de clasă pereche este prezentată mai jos.

După cum puteți vedea, atunci când creați o instanță a acestei clase, în paranteze unghiulare trebuie să indice același număr de tipuri ca parametri. Dacă sunteți familiarizat cu acest tip de structură de date ca o hartă, puteți vedea că folosește exact același principiu. Acolo, primul argument specifică tipul de cheie, iar al doilea - tipul de valoare. Trebuie remarcat faptul că tipurile de transmis atunci când un obiect argumente se pot suprapune. De exemplu, următorul anunț pereche de clasă instanță este absolut corectă: pereche obj.

Unele caracteristici ale generalizări

Înainte de a merge mai departe, trebuie remarcat faptul că compilatorul Java nu crea diferite versiuni ale perechii de clasă. De fapt, în procesul de elaborare a unui tip de generalizat toate informațiile sunt șterse. În schimb, vă aduce tipurile corespunzătoare, creând o versiune specială a clasei pereche. Cu toate acestea, în program există încă doar o versiune generică a clasei. Acest proces este numit în Java de tip generic de curățare.

Notă un punct important. Link-uri către diferite versiuni ale aceleiași clase generice Java nu poate indica unul și același obiect. Asta este, să presupunem că avem două link-uri: Asocierea obj1 și pereche obj2. Prin urmare, în linia obj1 = obj2 o eroare. Deși ambele variabile sunt de tip pereche , obiectele la care se referă, sunt diferite. Acesta este un prim exemplu de tipuri de securitate în Java Generic.

Restricții privind clase generice

Este important de știut că generalizări pot fi aplicate numai tipuri de referință, care este de a trece parametrii generica argument Java clasă trebuie să fie un tip de clasă. Aceste tipuri simple, cum ar fi, de exemplu, duble sau lungi, nu pot fi transferate. Cu alte cuvinte, următoarea linie pereche declarația de clasă nu este permis: pereche obj. Cu toate acestea, această limitare nu este o problemă serioasă, deoarece există o clasă Java înveliș corespunzător pentru fiecare tip primitiv. Strict vorbind, daca perechea de clasa pe care doriți să îngloba un întreg și boolean valoarea avtoupakovka face totul pentru tine: Pereche obj = new Pair <> (25, true).

O altă limitare serioasă este incapacitatea de a crea o instanță a tipului de parametru. De exemplu, următoarea linie va provoca o eroare de compilare: T = primul nou T (). Acest lucru este evident, pentru că nu știi în avans dacă un argument a trecut o clasă completă sau abstracte, sau chiar de interfață. Același lucru este valabil și pentru crearea de matrice.

tipuri de limitate

Destul de des există situații când este necesar să se limiteze lista de tipuri, care pot fi transmise ca argument pentru java clasa generice. Să presupunem că în perechea noastră clasă vrem să încapsula numai valorile numerice pentru alte operații matematice asupra acestora. Pentru a face acest lucru avem nevoie pentru a defini limita superioară a tipului de parametru. Aceasta se realizează prin intermediul unui anunțuri superclasei moștenit toate argumentele transmise între paranteze unghiulare. Se va arăta după cum urmează: clasa pereche . In acest mod, compilatorul constata că în locul parametrului T poate fi substituit sau clasă Număr sau una din subclasele sale.

Aceasta este o recepție comună. Astfel de restricții sunt adesea folosite pentru a oferi parametrii de tip compatibilitate într-una și aceeași clasă. Luați în considerare exemplul din clasa pereche noastră: Clasa pereche . Aici vom spune compilatorului de tip T poate fi arbitrară, iar tipul V trebuie să fie de tip T sau unul dintre subclasele sale.

Limitarea „de jos“ este exact același mod, dar în loc de cuvântul se extinde de a scrie cuvântul super. Această clasă este clasificată pereche spune că, în loc de T poate fi substituită sau o ArrayList, sau orice clasă sau interfață care moștenește.

Metode Java generice și constructori

În Java, generalizări pot fi aplicate nu numai la clasele, dar, de asemenea, metode. De exemplu, o metodă generică poate fi declarată într-o clasă obișnuită.

După cum se vede în figura de mai sus, metoda de anunțuri generalizată nu este mare lucru. Suficient înainte de tipul de întoarcere a unei metode pentru a pune în paranteze unghiulare și specificați parametrii de tip în ele.

Dacă totul se face în mod similar constructorului:

paranteze unghiulare, în acest caz, a pus înainte numele proiectantului, pentru că el nu are nici o valoare de întoarcere. Rezultatul ambelor programe vor fi:

întreg

șir

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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