Bonjour,
Je souhaite comparer 2 objets ( des livres spécifiés par un titre, auteur, isbn).
J'ai redéfini les méthodes equals et hashCode de la classe Livre :
Cependant, le code suivant échoue à assertEquals(a,b) (j'utilise JUnit) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public boolean equals(Livre livre) { if (titre.equalsIgnoreCase(livre.getTitre()) && auteur.equalsIgnoreCase(livre.getAuteur()) && isbn == livre.getIsbn()) return true; else return false; } public int hashCode() { return titre.hashCode()+auteur.hashCode()+isbn.hashCode(); }
J'ai vérifié et j'ai bien le même hasCode. La seule différence entre les livres est que j'instancie une LinkedList à la construction du Livre. Cependant, je ne comprend pas pourquoi cette différence est prise en compte alors que j'ai réécris equals() et hashcode() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public void testLivreEquals() { Livre a = new Livre("titre","auteur","isbn"); Livre b = new Livre("titre","auteur","isbn"); assertTrue(a.equals(a)); assertTrue(b.equals(b)); assertTrue(a.equals(b)); assertTrue(b.equals(a)); assertEquals(a,b); LinkedList<Livre> c = new LinkedList<Livre>(); c.add(a); System.out.println(a.hashCode()+" "+b.hashCode()); assertTrue(c.contains(b)); }
Qu'est ce que j'ai oublié ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public Livre(String titre, String auteur, String numeroISBN) { this.titre = titre; this.auteur = auteur; this.isbn = numeroISBN; numMedia = compteurMedia++; listeExemplaire = new LinkedList<Exemplaire>(); }
Partager