Lecții din modul (2/2)
Generic în Java
Generic (Tipuri generice) au fost introduse în Java pentru a permite claselor, interfețelor și metodelor să opereze pe diferite tipuri ca parametri. Acest lucru asigură siguranța tipului de compilare și evită turnările explicite costisitoare în timpul execuției.
Clasele generice
O clasă generică este definită folosind paranteze unghiulare <T> unde T acţionează ca substituent pentru un tip care va fi specificat când clasa este instanţiată.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}Când creăm un obiect Box, specificăm tipul real:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!Metode generice
Puteți defini o singură metodă generică care poate accepta parametri de tip diferiți. Parametrul tip este plasat înaintea tipului de returnare al metodei.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}Wildcards și tipuri delimitate
Putem restricționa tipurile acceptate de un generic folosind cuvântul cheie extends (limită superioară) pentru a accepta un anumit tip sau subclasele sale.
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}Încercați-l singur
Completați clasa generică Box definind getter-ul getValue() care returnează T și setter-ul setValue(T value) care setează valoarea variabilei private.
Afișează indiciu
Scrieți metodele cu semnătura corectă folosind parametrul de tip generic `T`.
Soluție disponibilă după 3 încercări
Creați o metodă generică statică printArray care preia o matrice de tip T[] numită matrice și imprimă fiecare element folosind o buclă for-each.
Afișează indiciu
Parametrul de tip `<T>` trebuie plasat imediat după `static` și înainte de tipul returnat `void`.
Soluție disponibilă după 3 încercări
Creați o clasă statică StringContainer care implementează interfața Container parametrizată cu String. Definiți un constructor care preia un parametru String și implementați metoda getItem().
Afișează indiciu
Înlocuiți tipul generic `T` cu `String` în semnătura clasei și în tipul returnat de `getItem()`.
Soluție disponibilă după 3 încercări