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.