Estou acompanhando um livro de exercicios e em sua solução para os exercicios propriamente dito, apareceu os seguintes metodos
que para mim e algo novo alguem poderia comentar ou explicar o que cada um faz?
public boolean equals(Object obj){
boolean flag = false;
if (obj instanceof Empregado){
Empregado that = (Empregado) obj;
flag = that.cpf.equals(this.cpf);
}
return flag;
}
public int hashCode(){
return ((cpf != null) ? cpf.hashCode() : 0);
}
Muito bom mesmo Danilo consegui tirar um bom proveito, porém vou tentar desifrar o codigo acima passo a passo, valeu pelo direcionamento foi de grande valia.
Estou acompanhando um livro de exercicios e em sua solução para os exercicios propriamente dito, apareceu os seguintes metodos
que para mim e algo novo alguem poderia comentar ou explicar o que cada um faz?
public boolean equals(Object obj){
boolean flag = false;
if (obj instanceof Empregado){
Empregado that = (Empregado) obj;
flag = that.cpf.equals(this.cpf);
}
return flag;
}
public int hashCode(){
return ((cpf != null) ? cpf.hashCode() : 0);
}[/quote]
Olha, pelo que eu conheço de Java, eu entendo o código assim (espero que o restante da comunidade concorde comigo):
Esse método passa um objeto como parametro (Object obj), na linha do if ele faz um teste para ver se o parametro corresponde a uma instância da classe Empregado (obj instanceof Empregado), caso seja, esse atributo flag recebe o valor true caso o cpf da classe b[/b] seja igual o cpf do objeto b[/b].
Quanto ao segundo método, o teste dentro do return testa se o cpf é diferente de null, se for, retorna cpf.hashCode(), senão retorna 0.
Aproveitando o tópico: uma vez estávamos em laboratório e o professor pede a atenção de todo mundo e pergunta se alguém conhece o método instanceof. Uns levantam a mão e ele diz que isso é proibido na aula dele por ser POG(escreveu bem grande no quadro) e recomenda que os que não sabem usar não aprendam. Porém já vi algumas vezes o pessoal usando isso. Afinal, é correto ou não usar instanceof?
O seu professor é muito radical (e ingênuo); como tudo na vida, você deve conhecer tudo, mesmo que saiba que não é para usar no dia a dia.
Por acaso seu professor de karatê vai deixar de lhe ensinar aquele golpe mortal, só porque ele pode ser usado para matar?
Não senhor; ele vai ensinar corretamente; ou seja, não o usar no dia-a-dia, e só usá-lo nas condições adequadas.
instanceof não é POG (aliás, nas devidas condições nem o goto é POG) mas pode ser usado, é claro, para fazer algumas POGs.
Um lugar onde ele não é POG é na implementação de equals, onde você tem um parâmetro do tipo Object (e você não pode mudar o tipo desse parâmetro, porque você tem de seguir a declaração da classe Object) e você precisa verificar se o objeto passado é da mesma classe que this.