Java generice: descriere și metode
De la începuturi, limba Java a suferit numeroase modificări, ceea ce, fără îndoială, a adus caracteristici pozitive funcționalității sale. O astfel de modificare semnificativă este introducerea Java Generic sau generalizare. Această funcționalitate a făcut limba nu numai mai flexibilă și versatilă, dar și mult mai sigură în ceea ce privește reducerea tipurilor de date.
conținut
Faptul este că, înainte de introducerea genericilor, codul generic din Java ar putea fi creat numai prin trimiterea la tipul de obiect. Astfel de legături pot fi atribuite oricărui obiect. La urma urmei, toate clasele din Java sunt descendenți impliciți ai clasei Object. Cu toate acestea, această abordare este o sursă potențială de multe erori de siguranță de tip atunci când convertiți în mod explicit un obiect de la Obiect la tipul țintă. Atunci când se folosesc generalizări, toate distribuțiile sunt efectuate implicit și automat, ceea ce exclude chiar posibilitatea de apariție a erorilor.
Java Generics: descriere și exemplu
Să luăm un exemplu simplu de aplicare a generalizării la clasa obișnuită din figura de mai jos. Și numai atunci vom trece la o examinare detaliată a tuturor subtilităților și nuanțelor Java Generic.
Observați cum este declarată clasa Pair. Imediat după numele clasei, parantezele unghiulare sunt deschise, în care este indicată litera T. Este un tip de substituent care va fi înlocuit cu un anumit tip atunci când creați o instanță a acestei clase. Se pare ca aceasta: Pereche
Notă: Începând cu cea de-a opta versiune Java, specificând tipul de destinație atunci când link-ul este declarat, puteți lăsa parantezele unghiulare în constructor goale. Deci, exemplul de mai sus poate fi rescris după cum urmează: Pereche
Când o clasă este declarată astfel, atunci în acest corp, în loc de tipuri specifice de câmpuri, referințe și metode returnate prin metode, puteți utiliza această literă. Deoarece T este înlocuit de un tip specific la crearea unui obiect de clasă, primul și al doilea câmp vor fi de tipul Integer.
În urma logicii, argumentele firstItem și secondItem, transmise constructorului corespunzător, trebuie să fie de tipul Integer sau subclasa sa. Dacă încercați să transmiteți un tip de date diferit de cel specificat la crearea obiectului, compilatorul nu va sări peste această eroare. Deci, constructorul cu argumente la crearea obiectului va avea următoarea formă: Pair
O clasă generică cu mai mulți parametri de tip
În clasele generice, puteți declara și câțiva parametri de tip care sunt specificați în paranteze unghiulare separate prin virgule. Clasa Pair pentru acest caz este prezentată în figura de mai jos.
După cum puteți vedea, atunci când creați o instanță a unei astfel de clase în paranteze unghiulare, ar trebui specificat același număr de tipuri ca parametrii. Dacă sunteți familiarizat cu o astfel de structură de date ca Harta, atunci este posibil să observați că același principiu este utilizat acolo. Există primul argument care determină tipul cheii, iar al doilea - tipul valorii. Trebuie remarcat faptul că tipurile de argumente transmise la crearea obiectului pot fi aceleași. Deci, următoarea declarație a unei instanțe a clasei Pair este absolut corectă: Pair obj.
Unele caracteristici ale generalizărilor
Înainte de a continua, trebuie menționat faptul că compilatorul Java nu creează alte versiuni ale clasei Pair. De fapt, în timpul procesului de compilare, toate informațiile despre tipul generic sunt șterse. În schimb, sunt distribuite tipurile corespunzătoare, creând o versiune specială a clasei Pair. Cu toate acestea, programul în sine are încă o singură versiune generalizată a acestei clase. Acest proces este numit în curățarea de tip generic Java.
Să notăm un punct important. Referințele la diferite versiuni ale aceleiași clase generice de tip java nu pot indica același obiect. Adică să spunem că avem două legături: Pereche
Restricții impuse clasei generalizate
Este important să știm că generalizările pot fi aplicate numai tipurilor de referință, adică argumentul transmis parametrului java al clasei generice trebuie să fie neapărat un tip de clasă. Astfel de tipuri simple, de exemplu, duble sau lungi, nu pot fi transmise. Cu alte cuvinte, următoarea linie a declarației Clasa Pair nu este validă: Pereche
O altă limitare gravă este imposibilitatea de a crea o instanță a unui parametru de tip. Deci, următoarea linie va provoca o eroare de compilare: T first = new T (). Acest lucru este evident, deoarece nu știți în prealabil dacă o clasă completă sau o interfață abstractă va fi trecută ca argument. Același lucru este valabil și pentru crearea matricelor.
Tipuri limitate
Destul de des există situații în care este necesar să se limiteze lista tipurilor care pot fi transmise ca argument la clasa generică Java. Să presupunem că, în clasa Pair, vrem să încapsulam exclusiv valori numerice pentru operațiile matematice ulterioare pe ele. Pentru a face acest lucru, trebuie să setăm limita superioară a parametrului de tip. Aceasta este implementată utilizând o declarație superclass moștenită de toate argumentele transmise în paranteze unghiulare. Acesta va arata astfel: pereche de clasa
Aceasta este o tehnică comună. Astfel de restricții sunt adesea folosite pentru a asigura compatibilitatea parametrilor de tip din aceeași clasă. Luați în considerare un exemplu pe clasa Pair: clasa Pair. Aici îi spunem compilatorului că tipul T poate fi arbitrar, iar tipul V trebuie să fie tip T sau una dintre subclasele sale.
Restricția "de jos" apare exact în același mod, dar în loc de cuvânt se extinde, se scrie cuvântul super. Aceasta este o pereche de clase
Metode generice Java și constructori
În Java, generalizările pot fi aplicate nu numai în ceea ce privește clasele, ci și metodele. Deci, metoda generalizată poate fi declarată în clasa obișnuită.
După cum puteți vedea în figura de mai sus, nu există nimic complicat în declararea metodei generalizate. Este suficient să introduceți unghiuri înaintea metodei tip retur și să specificați parametrii de tip în ele.
În cazul constructorului, totul se face în același mod:
În acest caz, barele de unghiuri sunt plasate înaintea numelui constructorului, deoarece nu returnează nicio valoare. Rezultatul lucrărilor ambelor programe va fi:
întreg
șir
Cum se instalează Java pe Windows 7
Cum se actualizează Java pe sistemele de operare Linux și Windows?
Primul program Java este Hello World
Limbaj de programare Java
Familia de motociclete `Java-350`
"Java-634" - o motocicletă populară din anii șaptezeci
"Java 350-638" - visul motociclistului sovietic
Țigarete Java: descriere și tipuri
Java: expresii regulate, caractere speciale
Programare: Java. Tipuri de date
Mediu de dezvoltare integrat Java
Formatul JAR: ce se deschide pe computer sau pe telefon
Java nu este instalat: ce ar trebui să fac? Cum se instalează pe Ubuntu?
Java: InputStream. Fluxuri de intrare
BigInteger Java: lucrul cu numere mari
Java Array. Arrays în Java. Java pentru începători
Java: lucrul cu fișiere - scrierea, citirea, ștergerea
Elemente ale modelului obiect Java: clasă abstractă, interfață
Cum se activează Java în Firefox pentru probleme de blocare
Cum se elimină java de pe computer? Este ușor!
Cum se scrie într-un fișier din Java