Generics and Wildcards
Generics provide compile-time type safety without repeated casts.
List<String> names = new ArrayList<>();
names.add("Java");
static double sum(List<? extends Number> values) {
double total = 0;
for (Number value : values) {
total += value.doubleValue();
}
return total;
}
? extends T is useful when a structure is primarily a producer of T. ? super T is useful when it consumes T. This is commonly remembered as PECS: Producer Extends, Consumer Super.
Generic type information is largely erased at runtime.
PECS
Use extends when you mainly read values as a base type; use super when you mainly write values of a subtype.
Key Takeaways
- Generics catch many type errors at compile time.
? extends Tis producer-oriented;? super Tis consumer-oriented.- Java generics use type erasure rather than fully reified generic types.