Equals sem acesso a atributo

Ola, bom dia, estou com o seguinte problema, devo sobrescrever o método equals onde devo acessar o atributo do argumento de equals, estou orientando que o argumento de equals ( Object object ) é de uma classe ProdutocomTamanho, mas ele não aceita…

public class ProdutoComTamanho extends Produto {

	public int tamanho; //Este é o atributo que quero acessar no equuals

	public ProdutoComTamanho(String nome, int codigo, double preco, int tamanho) {
		super(nome, codigo, preco);
		this.tamanho = tamanho;
		
	}	
	@Override
	public int hashCode() {
		return super.codigo;
	}
	@Override
	public boolean equals(Object obj) {
		if(super.codigo == obj.hashCode() && this.tamanho == (ProdutoComTamanho) obj.tamanho)
			return true;                                 //Não aceita este casting
		return false;
	}
}

quando vc faz

(ProdutoComTamanho) obj.tamanho

vc tenta converter o tamanho ( que é um inteiro ) em um objeto e da zica.

vc deveria tentar

((ProdutoComTamanho) obj).tamanho

porem vc pode ter um erro em runtime se vc passar qq outra coisa que não seja um ProdutoComTamanho ( ex: produto com o mesmo codigo.

melhore sua condição ( no if ) com:

ProdutoComTamanho.class.isAssignableFrom(obj.getClass())

ou

this.class.isAssignableFrom(obj.getClass())

isso retorna true se o objeto for um ProdutoComTamanho. isso vai garantir que o cast dara certo

1 curtida

Faz assim.

@Override
public boolean equals(Object obj) {
    if (this == other)
	return true;
    if (!(this.getClass().isInstance(obj)))
	return false;
    ProdutoComTamanho castOther = (ProdutoComTamanho) obj; //faz o cast do objeto passado como parâmetro 
    if(super.codigo == castOther.hashCode() && this.tamanho == castOther.getTamanho()) //faz a comparação com a propriedade
	return true;                                
    return false;
}
1 curtida

Alguns exemplos de como implementar hashCode e equals

http://www.staroski.com.br/2014/10/05/equals-utils/

http://www.staroski.com.br/2014/10/06/hashcode-utils/

http://www.staroski.com.br/2014/10/07/equality-strategy/

1 curtida

A todos o meu obrigado. A respostas foram ótimas, pena que não dá para colocar mais de uma como solução

1 curtida