Java · Avançado · Inglês · Técnico
PECS
Regra mnemônica 'producer extends, consumer super': use ? extends T em estruturas que só fornecem dados e ? super T nas que só os recebem.
Onde usar
Aparece ao desenhar APIs genéricas como Collections.copy(dest, src). Em review: 'aqui cabe PECS'.
Em código
static <T> void copiar(
List<? super T> destino,
List<? extends T> origem) {
for (T t : origem) destino.add(t);
}
copiar(new ArrayList<Object>(),
List.of("a", "b"));Exemplos
Follow PECS: extends to read from it, super to write into it.
Siga o PECS: extends para ler dele, super para escrever nele.
The source is a producer, so it takes extends.
A origem é um producer, então recebe extends.
Cuidado
Não use wildcard em tipo de retorno: o chamador fica com um tipo difícil de usar.
Origem
Sigla de Producer Extends, Consumer Super, cunhada por Joshua Bloch em Effective Java.