Vai al contenuto
eLearner.app
Modulo 6 · Lezione 2 di 212/14 nel corso~15 min
Lezioni del modulo (2/2)

Tipi Generici in Java

I Generics (Tipi Generici) sono stati introdotti in Java per consentire a classi, interfacce e metodi di operare su tipi diversi come parametri, garantendo il controllo dei tipi a tempo di compilazione (Compile-time Type Safety) ed evitando costosi cast espliciti a runtime.

Classi Generiche

Una classe generica viene definita utilizzando le parentesi angolari <T> dove T rappresenta un segnaposto per un tipo che verrà specificato al momento dell'istanziazione.

Code
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Quando creiamo un oggetto di tipo Box, specifichiamo il tipo effettivo:

Code
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // Nessun cast necessario!

Metodi Generici

È possibile definire un singolo metodo generico in grado di accettare parametri di tipo differenti. Il parametro di tipo viene posizionato prima del tipo di ritorno del metodo.

Code
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Limitazioni dei Generics (Wildcards)

Possiamo limitare i tipi accettati da un generico tramite la parola chiave extends (limite superiore) per accettare un tipo specifico o le sue sottoclassi.

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

Prova tu

Esercizio#java.m6.l2.e1
Tentativi: 0Caricamento…

Completa la classe generica Box definendo il getter getValue() che ritorna T e il setter setValue(T value) che imposta la variabile privata value.

Caricamento editor…
Mostra suggerimento

Scrivi i metodi con la giusta firma usando il parametro di tipo generico `T`.

Soluzione disponibile dopo 3 tentativi

Esercizio#java.m6.l2.e2
Tentativi: 0Caricamento…

Crea un metodo generico statico printArray che prende in ingresso un array di tipo T[] denominato array e stampa ciascun elemento tramite un ciclo for-each.

Caricamento editor…
Mostra suggerimento

Il parametro di tipo `<T>` va posizionato subito dopo `static` e prima del valore di ritorno `void`.

Soluzione disponibile dopo 3 tentativi

Esercizio#java.m6.l2.e3
Tentativi: 0Caricamento…

Crea una classe statica StringContainer che implementa l'interfaccia Container parametrizzata con String. Definisci un costruttore che accetta un parametro String e implementa il metodo getItem().

Caricamento editor…
Mostra suggerimento

Sostituisci il tipo generico `T` con `String` nella firma della classe e nel tipo di ritorno del metodo `getItem()`.

Soluzione disponibile dopo 3 tentativi