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
A todos o meu obrigado. A respostas foram ótimas, pena que não dá para colocar mais de uma como solução
1 curtida