PECS: Producer Extends, Consumer Super
static void addNumbers(List<? super Integer> list) {
list.add(1); // safe: an Integer fits any supertype list
list.add(2);
}
addNumbers(listOfNumber); // [1, 2]
addNumbers(listOfObject); // [1, 2]
The rule of thumb is PECS: if the parameter produces values you read, use ? extends; if it consumes values you write, use ? super. Reading from a ? super Integer list only guarantees Object — so read with extends, write with super.