Dúvida sobre Generics

2 respostas
Carlos.miller

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

M

Olá!

recebe parâmetros do tipo IS-A Classe/Interface -> não é possível realizar alteração na lista

recebe supertipos de Classe, é possível adicionar elementos...

Você quer receber uma como argumento da outra?

public class Mae {}
public class Filha extends Mae{ }

import java.util.ArrayList;
import java.util.List;

public class Generico {

	public static void addTeste1(List<? extends Filha> lista) {
		for(Mae a: lista) {
			System.out.println(a);
		}
	}
	
	public static void addTeste2( List<? super Filha> lista ) {
		lista.add(new Filha());
	}
		
	public static void main(String[] args) {s

		List<? extends Filha> filhaExtends = new ArrayList<Filha>();
		List<? super Filha> filhaSuper = new ArrayList<Filha>();
		
		addTeste1(filhaExtends);
		addTeste1(filhaSuper);              /* Compilation Fails... */
		
		addTeste2(filhaSuper);		
		addTeste2(filhaExtends);	     /* Compilation Fails...*/						
	}
}

Tire sua conclusões...

Carlos.miller

Muito Obrigado mfjeng

Ajudou em 1000% :wink:

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