2 metodos que sao novidade pra mim

Boa Noite!

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);
}

Olha este artigo, é importante você entender estes dois métodos direitinho. São fundamentais para o aprendizado da linguagem.

http://www.infoblogs.com.br/view.action?contentId=27535&equals-e-hashCode---Parte-1

Abs!
Danilo

[quote=rodrigues.danilo]Olha este artigo, é importante você entender estes dois métodos direitinho. São fundamentais para o aprendizado da linguagem.

http://www.infoblogs.com.br/view.action?contentId=27535&equals-e-hashCode---Parte-1

Abs!
Danilo[/quote]

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.

abs

[quote=Luciano Danilo]Boa Noite!

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.

é isso ai, algumas IDE´s como o Eclipse te possibilitam uma forma de sobrescrever os métodos equals e hashCode

Abs

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.

Porque ele disse que é POG?? Se você estiver usando Reflection muito provavelmente vai precisar também usar instanceof

Abs

Não só como Reflection mas também nas classes singleton…certo galera ???

Num acho que é POG, vejo que ai tem uma visão muito purista da coisa e derrepente como já disseram muito radical.

abs,