Dúvida sobre Generics

Galera não sou programador pleno nem nada, mas como tenho utilizado JAVA nas minhas aulas para o ensino prático de equações. Logo, resolvi aprimorar um pouco o conhecimento (para não ficar no marasmo :oops: ). [color=red]Minha dúvida é a seguinte…[/color]

[size=18]Amostra 1:[/size]

[code]public class NewClass {

static void passaGeneric(List<? extends CharSequence> lista) {
// nada
}

public static void main(String[] args) {
    List<? extends String> lista = new ArrayList<String>();
    passaGeneric(lista); // recebendo o <? extends String>
}

}[/code]
[size=18]Amostra 2:[/size]

[code]public class NewClass {

static void passaGeneric(List<? super String> lista) {
    // nada
}

public static void main(String[] args) {
    List<? super String> lista = new ArrayList<String>();
    passaGeneric(lista); // recebendo o <? super String>
}

}[/code]
[size=14]Nas Wildcards, jamais terei as combinações?[/size] [color=blue]Obs. Linha 3 e 9 dos exemplos![/color]
<? extends Tipo> EM [color=red]passaGeneric(…) [/color]RECEBENDO <? [color=red]super[/color] Tipo>
<? [color=red]super[/color] Tipo> EM [color=red]passaGeneric(…)[/color] RECEBENDO <? extends Tipo>

Seria uma combinação vaga? Correto?

Muito Obrigado! :wink:

Olá Carlos.miller,
não sei bem se entendi a sua dúvida, mas posso tentar explicar o comportamento dos 2 códigos:
No primeiro exemplo: static void passaGeneric(List&lt;? extends CharSequence&gt; lista) { // nada } seu método passaGeneric pode receber um conjunto que seja um subtipo de List com o tipo CharSequence, incluindo os subtipos de CharSequence. Mas, você não poderá usar o método add, pois não pode adicionar nada no conjunto.

Já no segundo código: static void passaGeneric(List&lt;? super String&gt; lista) { // nada } você está usando o coringa e pode adicionar no conjunto de uma forma segura: super. No seu código, você está dizendo que seu método poderá aceitar qualquer List com um tipo genérico que seja do tipo String ou um supertipo de String.

Resumo:

  • Usando extends você não pode adicionar elementos no conjunto, pois é usado para ler dados, e não escrever dados.
  • Usando super você pode [b]adicionar/b elementos no conjunto.

Espero ter contribuído! :grin:

Ajudou sim serjaumfantin! :wink:

Agora compreendi!