Salt la conținutul principal
Modulul 6 · Lecția 2 din 212/14 în curs~15 min
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ă.

Java
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:

Java
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.

Java
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.

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

Încercați-l singur

Exercițiu#java.m6.l2.e1
Încercări: 0Se încarcă…

Completați clasa generică Box definind getter-ul getValue() care returnează T și setter-ul setValue(T value) care setează valoarea variabilei private.

Se încarcă editorul...
Afișează indiciu

Scrieți metodele cu semnătura corectă folosind parametrul de tip generic `T`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m6.l2.e2
Încercări: 0Se încarcă…

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.

Se încarcă editorul...
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

Exercițiu#java.m6.l2.e3
Încercări: 0Se încarcă…

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().

Se încarcă editorul...
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