lezione 07

generics avanzati in java

wildcards, bounded types e design di api sicure.

livello: intermedio durata: 32 min output: api type-safe badge: generics pro

overview

i generics riducono cast e bug. con bound e wildcard puoi controllare la variabilità delle api.

regola base: producer extends, consumer super.

bounded types

usa <T extends Number> per limitare i tipi accettati.

class stats<T extends Number> {
    double avg(List<T> values) {
        double sum = 0;
        for (T v : values) sum += v.doubleValue();
        return sum / values.size();
    }
}

wildcards

le wildcard modellano variabilità. ? extends per leggere, ? super per scrivere.

void copy(List<? extends Number> src, List<? super Number> dst) {
    for (Number n : src) dst.add(n);
}

design api

mantieni le signature semplici. evita l'overuse di wildcard se non serve.

  • preferisci factory method
  • evita raw types
  • documenta i bound

esercizi

crea una classe repository<T> con metodi find e save.

riscrivi un metodo che usa Object usando generics e bound.

checklist

  • usa bound per vincolare i tipi
  • applica pe/ce per le wildcard
  • evita raw types
  • scrivi test su casi limite

panoramica

In questo capitolo su generics avanzati in java, wildcards, bounded types e design di api sicure. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.

Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).

badge: generics pro

obiettivi

  • capire e applicare overview in uno scenario reale
  • capire e applicare bounded types in uno scenario reale
  • capire e applicare wildcards in uno scenario reale
  • capire e applicare design api in uno scenario reale

scheda rapida

import java.util.List;

public class Main {
  public static void main(String[] args) {
    var dati = List.of(1, 2, 3);
    var out = dati.stream().map(x -> x * 2).toList();
    System.out.println(out);
  }
}

Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.

tips

  • organizza package per dominio
  • preferisci immutabilità dove possibile
  • documenta le API pubbliche
  • usa ? extends per lettura
  • usa ? super per scrittura
  • limita T con extends

tip: Generics servono per sicurezza: se complica il codice, riduci.

mini progetto

Repository generico con vincoli.

  • definisci Repository
  • aggiungi T extends Entity
  • implementa findById
  • usa in due classi

output atteso: uno script o query ripetibile con risultati verificabili.

start a brief