Dúvida sobre Generics

2 respostas
C

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]
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>
    }
}
[size=18]Amostra 2:[/size]
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>
    }
}
[size=14]Nas Wildcards, jamais terei as combinações?[/size] [color=blue]Obs. Linha 3 e 9 dos exemplos![/color] EM [color=red]passaGeneric(...) [/color]RECEBENDO EM [color=red]passaGeneric(...)[/color] RECEBENDO

Seria uma combinação vaga? Correto?

Muito Obrigado! :wink:

2 Respostas

S

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:

C

Ajudou sim serjaumfantin! :wink:

Agora compreendi!

Criado 29 de março de 2008
Ultima resposta 31 de mar. de 2008
Respostas 2
Participantes 2