ExpertiDict

Java · Avançado · Inglês · Técnico

PECS

/pɛks/substantivo

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.

Veja também

Todos os termos de Java