Passer au contenu principal
eLearner.app
Module 6 · Leçon 2 sur 212/14 dans le cours~15 min
Leçons du module (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

Exercice#java.m6.l2.e1
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Exercice#java.m6.l2.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives

Exercice#java.m6.l2.e3
Tentatives : 0Chargement…

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

Chargement de l'éditeur…
Afficher l'indice

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

Solution disponible après 3 tentatives