Bom dia galera… Estou estudando para a certificacao SCJP pelo livro da Kathy e apareceu uma duvida… quando eu faço uma alteracao no codigo. O livro diz que funciona mas pelo que eu executei ele nao funciona… A minha pergunta é: Funciona ou nao…? O codigo e a alteracao esta abaixo… Obrigado…
import java.util.*;
enum Pets {DOG, CAT, HORSE }
class MapTest {
public static void main(String[] args) {
Map<Object, Object> m = new HashMap<Object, Object>();
m.put("K1", new Dog("aiko").name);
m.put("K2", Pets.DOG);
m.put(Pets.CAT, "CAT Key");
Dog d1 = new Dog("Clover");
m.put(d1, "Dog Key");
m.put(new Cat(), "Cat Key");
System.out.println(m.get("K1"));
String k2 = "K2";
System.out.println(m.get(k2));
Pets p = Pets.CAT;
System.out.println(m.get(p));
System.out.println(m.get(d1));
System.out.println(m.get(new Cat()));
System.out.println(m.size());
// aqui é a alteracao
Dog dd = new Dog("Clover");
System.out.println(m.get(dd));
System.out.println(m.get(new Dog("Clover")));
}
}
Como esta no codigo… o livro fala que se eu alterar a instancia do objeto Dog() o Map nao funciona… mas eu executei e funcionou…
// se eu mudar o livro diz que ele tem 8 chars e no Map são 6 e que nao funciona
d1.name = "magnolia";
System.out.println(m.get(d1));
Ele imprimiu o valor do Map…
Estou certo…
OBS: O metodo equals e hasCode da classe Dog esta correto…
Não se compara Strings e outros objetos usando ==. Uma implementação melhor para seu método equals seria a seguinte:
public boolean equals(Object o){
return o instanceof Dog && ((Dog)o).name.equals(name);
}
A implementação do método hashCode também não é a melhor possível, pois pode retornar o mesmo hashcode para objetos diferentes. Embora isso seja permitido pelo contrato de hashCode, é melhor fazer uma dispersão maior. Como o seu equals depende de name, uma implementação melhor seria a seguinte:
public int hashCode(){
return name.hashCode();
}
Outra coisa, você está usando o livro em inglês ou português? Se for em inglês, pode dizer a página em que aparece o que você fala? Daí eu dou uma olhada quando chegar em casa e confiro se o livro está correto.
[quote=#@®®¡$]Olá,
Outra coisa, você está usando o livro em inglês ou português? Se for em inglês, pode dizer a página em que aparece o que você fala? Daí eu dou uma olhada quando chegar em casa e confiro se o livro está correto.[/quote]
O meu livro é em portugues… pagina 315…sobre generics e collections…
mas pelo meu codigo deveria retornar o valor ou falso?