Ola pessoa estou com duas duvidas, na verdade é só para ter a confirmação.
1° segundo o livro SCJP 6 do Kathy Sierra pág. 360 diz o seguinte:
quero saber o seguinte esta regra só ser aplica ao ‘? extends’ ? pois visto no código abaixo linha 10 e 15, com o ‘? super’ consigo adicionar normalmente.
com o extends dar erro ao tenta adicionar um elemento.
2° não achei referência ou não me lembro de visto que diz que uma classe genérica só pode usar como coringa o extends e o super não veja o código linha 38
[code]package treino_12.Collection;
import java.util.HashMap;
import java.util.Map;
public class TesteHashCode {
public static void main(String[] args) {
//Map<? extends Pessoa,String> map = new HashMap<Pessoa,String>(); // assim não funciona por causa do extends
Map<? super Pessoa,String> map = new HashMap<Pessoa,String>();// agora assim já funciona, porque com super funciona e com extends não funcionar
Pessoa p1 = new Pessoa("Ana");
map.put(p1, "p1"); // dar //ERRO DE COMPILAÇÃO ser troca a linha acima pela debaixo
System.out.println(map);
List<? super Pessoa> listSuper = new ArrayList<Pessoa>();
listSuper.add(p1);
List<? extends Pessoa> listExtends = new ArrayList<Pessoa>();
//listExtends.add(p1); //Erro de compilação
}
}
class Pessoa{
String nome;
Pessoa(String nome){this.nome = nome; }
Pessoa(){ this.nome ="Não informou o Nome";}
@Override
public boolean equals(Object o){
return ((Pessoa)o).nome.equals(this.nome);
}
public int hashCode(){ return 9; }
}
class PessoaFisica extends Pessoa{}
class PessoaGenerica<T extends Pessoa>{}// assim funciona já funcionar com extends
//class PessoaGenerica<T super Pessoa>{} // assim já não funciona com o super//ERRO DE COMPILAÇÃO[/code]
Desculpe ser não fui claro e pelo português.
.