public boolean equals(Object o) {
boolean x=false;
Pessoa p = (Pessoa) o;
if (p.getIdade()=this.idade) {
if(p.getNome().equals(this.nome)) {
x=true;
}
}
return x;
}
public boolean equals(Object o) {
boolean x=false;
Pessoa p = (Pessoa) o;
if (p.getIdade()=this.idade) {
if(p.getNome().equals(this.nome)) {
x=true;
}
}
return x;
}
Lembre-se = é diferente de ==
public boolean equals(Object o) {
Pessoa p = (Pessoa) o;
if (p.getIdade()==this.idade)
if(p.getNome().equals(this.nome))
return true;
return false;
}
Seria bom verificar se o Object o é instancia de Pessoa com instance of tambem
Dentro do if vc não deve usar = e sim ==.
Para fazer a verificação com instanceof ficaria assim:
if (o instanceof Pessoa)
Se usar o Eclipse ele gera pra você basta clicar CTRL + D e Generate Equals e HaschCode
:lol:
[]'s
Correções:
Cuidado caso queria mudar as teclas de atalho vá até Preferences, caso
contrário o default do Eclipse é o seguinte.
CTRL + D é para excluir a linha.
alt+sfhit+s abri uma “janela” dai escolher a opção Generate HaschCode() and Equals.
[]'s
Se usar o Eclipse ele gera pra você basta clicar CTRL + D e Generate Equals e HaschCode
:lol:
Não use esta funcionalidade. Para uma classe com 2 atributos Obbject a e b ele gerou isto
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((a == null) ? 0 : a.hashCode());
result = PRIME * result + ((b == null) ? 0 : b.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final ClassX other = (ClassX) obj;
if (a == null) {
if (other.a != null)
return false;
} else if (!a.equals(other.a))
return false;
if (b == null) {
if (other.b != null)
return false;
} else if (!b.equals(other.b))
return false;
return true;
}
Quando o necessário seria apenas:
public int hashCode(){
return a.hashCode() ^ b.hashCode();
}
public boolean equals(Object other){
return other instanceof ClassX && equals((ClassX)other);
}
public boolean equals(ClassX other){
return a.equals(other.a) && b.equals(other.b);
}
Como estas funções são muito chamadas num map a implementação genérica do Eclipse é overkill (um canhão para matar micróbio)
equals não deve dar erro quando o objecto não é da classe pretendia, o seu codigo dá erro de o não é uma Pessoa
eis uma alternativa
public boolean equals(Object other) {
return other instanceof Pessoas && equals((Pessoa)other);
}
public boolean equals(Pessoa other){
return this.idade == other.idade && this.nome.equals(other.nome);
}
Sem ifs e muito simples de ler além de que não precisa usar get pode comparar os atributos diretamente.