Ar fi bine dacă am putea scrie o singură metodă de sortare care ar putea sorta elementele dintr-o matrice Întreg, o matrice String , sau o matrice de orice tip care acceptă comanda.
Java Metodele generice și clasele generice permit programatorilor să specifice, cu o declarație de metodă unică, un set de metode conexe sau cu o declarație de clasă unică, un set de tipuri conexe, respectiv.
Genericele asigură, de asemenea, siguranța tipului de compilare, care permite programatorilor să prindă tipuri nevalide în timpul compilării.
Utilizând conceptul Java Generic, am putea scrie o metodă generică pentru sortarea unei matrice de obiecte, apoi invocați metoda generică cu matrice întregi, matrice duble, matrice de șiruri și așa mai departe, pentru a sorta elementele matricei.
Metode generice
Puteți scrie o singură declarație de metodă generică care poate fi ca. plin de argumente de diferite tipuri. Pe baza tipurilor de argumente transmise metodei generice, compilatorul gestionează în mod corespunzător fiecare apel de metodă. Următoarele sunt regulile de definire a metodelor generice –
-
Toate declarațiile metodei generice au o secțiune de parametru de tip delimitată de paranteze unghiulare (< și >) care precede tipul de returnare al metodei (< E > în exemplul următor ).
-
Fiecare secțiune de parametri de tip conține unul sau mai mulți parametri de tip separați prin virgule. Un parametru de tip, cunoscut și sub numele de variabilă de tip, este un identificator care specifică un nume de tip generic .
-
Parametrii de tip pot fi utilizați pentru a declara tipul returnat și a acționa ca substituenți pentru tipurile de argumente transmise metodei generice, care sunt cunoscute ca argumente de tip real.
-
Corpul unei metode generice este declarat ca cel al oricărei alte metode. Rețineți că parametrii de tip pot reprezenta doar tipuri de referință, nu tipuri primitive (cum ar fi int, double și char).
Exemplu
Următorul exemplu ilustrează modul în care poate imprima o matrice de tip diferit folosind o singură metodă generică –
Acest lucru va produce următorul rezultat –
Ieșire
Array integerArray contains:1 2 3 4 5 Array doubleArray contains:1.1 2.2 3.3 4.4 Array characterArray contains:H E L L O
Parametri de tip limitați
S-ar putea să apară momente în care veți dori să restricționați tipurile de tipuri care pot fi transmise unui parametru de tip. De exemplu, o metodă care funcționează pe numere ar putea doriți să acceptați doar instanțe ale numărului sau ale subclaselor acestuia. Pentru aceasta sunt folosiți parametrii de tip mărginit.
Pentru a declara un parametru de tip mărginit, enumerați numele parametrului de tip, urmat de cuvântul cheie extins, urmat de limita superioară a acestuia.
Exemplu
Următorul exemplu ilustrează modul în care extends este utilizat în sens general pentru a însemna fie „extends” (ca în clase), fie „implemente” (ca în interfețe) . Acest exemplu este metoda generică pentru a returna cel mai mare dintre cele trei obiecte comparabile –
Acest lucru va produce următorul rezultat –
Ieșire
Max of 3, 4 and 5 is 5Max of 6.6,8.8 and 7.7 is 8.8Max of pear, apple and orange is pear
Clase generice
O declarație de clasă generică arată ca o declarație de clasă non-generică, cu excepția faptului că numele clasei este urmat de o secțiune de parametri de tip.
La fel ca în cazul genericului metode, secțiunea parametrilor de tip dintr-o clasă generică poate avea unul sau mai mulți parametri de tip separați prin virgule. Aceste clase sunt cunoscute ca clase parametrizate sau tipuri parametrizate deoarece acceptă unul sau mai mulți parametri.
Exemplu
Următorul exemplu ilustrează modul în care putem defini o clasă generică –
Acesta va produce următorul rezultat –
Ieșire
Integer Value :10String Value :Hello World