Bom implementei uma classe chamada Manga, nela implementei o EQUALS e o HASH CODE conforme vocês podem ver abaixo:
package beans;
import java.util.ArrayList;
public class Manga {
private int codigo;
private String nome;
private ArrayList<Edicao> edicao;
private ArrayList<Autor> autor;
private Editora editora;
public Manga(int codigo, String nome, ArrayList<Edicao> edicao, ArrayList<Autor> autor, Editora editora) {
setCodigo(codigo);
setNome(nome);
setEdicao(edicao);
setAutor(autor);
setEditora(editora);
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public ArrayList<Edicao> getEdicao() {
return edicao;
}
public void setEdicao(ArrayList<Edicao> edicao) {
this.edicao = edicao;
}
public ArrayList<Autor> getAutor() {
return autor;
}
public void setAutor(ArrayList<Autor> autor) {
this.autor = autor;
}
public Editora getEditora() {
return editora;
}
public void setEditora(Editora editora) {
this.editora = editora;
}
public String toString() {
return "Código: "+ codigo +
"\nNome: " + nome +
"\nEdição: " + edicao.toString() +
"\nAutor:" + autor.toString() +
"\nEditora: " + editora.toString();
}
public boolean equals(Object object) {
if(object == null) {
return false;
}
if( ! (this.getClass().equals(object.getClass())) ) {
return false;
}
Manga manga = (Manga) object;
boolean codigosIguais = this.getCodigo() == manga.getCodigo();
boolean nomesIguais;
boolean edicoesIguais;
boolean autoresIguais;
boolean editorasIguais;
if(this.getNome() != null) {
nomesIguais = this.getNome().equals(manga.getNome());
}else{
nomesIguais = this.getNome() == null;
}
if(this.getEdicao() != null) {
edicoesIguais = this.getEdicao().equals(manga.getEdicao());
}else{
edicoesIguais = this.getEdicao() == null;
}
if(this.getAutor() != null) {
autoresIguais = this.getAutor().equals(manga.getAutor());
}else{
autoresIguais = this.getAutor() == null;
}
if(this.getEditora() != null) {
editorasIguais = this.getEditora().equals(manga.getEditora());
}else{
editorasIguais = this.getEditora() == null;
}
return codigosIguais && nomesIguais && edicoesIguais && autoresIguais && editorasIguais;
}
public int hashCode() {
int resultado = 17;
resultado = 37 * resultado + codigo;
resultado = 37 * resultado + (nome != null ? nome.hashCode() : 0);
resultado = 37 * resultado + (edicao != null ? edicao.hashCode() : 0);
resultado = 37 * resultado + (autor != null ? autor.hashCode() : 0);
resultado = 37 * resultado + (editora != null ? editora.hashCode() :0);
return resultado;
}
}
Tenho outras classes (nestas ainda não implementei os Hash e o Equals conforme abaixo.
package beans;
public class Edicao {
private int edicao;
private int numeroDePaginas;
private double preco;
public Edicao(int edicao, int numeroDePaginas, double preco) {
setEdicao(edicao);
setNumeroDePaginas(numeroDePaginas);
setPreco(preco);
}
public int getEdicao() {
return edicao;
}
public void setEdicao(int edicao) {
this.edicao = edicao;
}
public int getNumeroDePaginas() {
return numeroDePaginas;
}
public void setNumeroDePaginas(int numeroDePaginas) {
this.numeroDePaginas = numeroDePaginas;
}
public double getPreco() {
return preco;
}
public void setPreco(double preco) {
this.preco = preco;
}
public String toString() {
return "Edição: " + edicao +
"\nNúmero de Páginas: " + numeroDePaginas +
"\n Preço: " + preco;
}
}
package beans;
public class Autor {
private int codigo;
private String nome;
private String sobrenome;
public Autor(int codigo, String nome, String sobrenome) {
setCodigo(codigo);
setNome(nome);
setSobrenome(sobrenome);
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getSobrenome() {
return sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
public String toString() {
return "Nome: " + nome +
"Sobrenome: " + sobrenome;
}
}
package beans;
public class Editora {
private int codigo;
private String nome;
private String cnpj;
public Editora(int codigo, String nome, String cnpj) {
setCodigo(codigo);
setNome(nome);
setCnpj(cnpj);
}
public int getCodigo() {
return codigo;
}
public void setCodigo(int codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCnpj() {
return cnpj;
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public String toString() {
return "Nome: " + nome +
"\nCnpj: " + cnpj;
}
}
Bom fui testar com a minha classe Main mas os valores HASH não batem. Meu Equals diz que são iguais, mas se vocês verem eu instanciei Arrays em um Objeto Manga e em outro não pela regra HASH ele ta correto, mas o equals devia retornar FALSE pois
if(this.getEdicao() != null) {
edicoesIguais = this.getEdicao().equals(manga.getEdicao());
}else{
edicoesIguais = this.getEdicao() == null;
if(this.getAutor() != null) {
autoresIguais = this.getAutor().equals(manga.getAutor());
}else{
autoresIguais = this.getAutor() == null;
}
no return deveria ser false pois return codigosIguais && nomesIguais && edicoesIguais && autoresIguais && editorasIguais;
isso tá ocorrendo porque não implementei equals nas outras classes?
package beans;
import java.util.ArrayList;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Manga m1 = new Manga(2, "ONE", null, null, null);
Manga m2 = new Manga(2, "ONE", new ArrayList<Edicao>(), new ArrayList<Autor>(), null);
if(m1.equals(m2))
System.out.println("São Iguais");
else
System.out.println("Não são iguais");
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
}
}
Valeu ae quem ajudar!!!
EDITADO:
Pessoas se eu coloco ele diz que não sao iguais!!! Que droga :@
if(m2.equals(m1))
System.out.println(“São Iguais”);
else
System.out.println(“Não são iguais”);
System.out.println(m1.hashCode());
System.out.println(m2.hashCode());
Povo Resolvi, mudei o método equals, falta de atenção mesmo. Valeu pela ajuda nel!!!
public boolean equals(Object object) {
if(object == null) {
return false;
}
if( ! (this.getClass().equals(object.getClass())) ) {
return false;
}
Manga manga = (Manga) object;
boolean codigosIguais = this.getCodigo() == manga.getCodigo();
boolean nomesIguais;
boolean edicoesIguais;
boolean autoresIguais;
boolean editorasIguais;
if(this.getNome() != null) {
nomesIguais = this.getNome().equals(manga.getNome());
}else{
nomesIguais = manga.getNome() == null;
}
if(this.getEdicao() != null) {
edicoesIguais = this.getEdicao().equals(manga.getEdicao());
}else{
edicoesIguais = manga.getEdicao() == null;
}
if(this.getAutor() != null) {
autoresIguais = this.getAutor().equals(manga.getAutor());
}else{
autoresIguais = manga.getAutor() == null;
}
if(this.getEditora() != null) {
editorasIguais = this.getEditora().equals(manga.getEditora());
}else{
editorasIguais = manga.getEditora() == null;
}
return codigosIguais && nomesIguais && edicoesIguais && autoresIguais && editorasIguais;
}