IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Tester deux objets avec equals()


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 46
    Points : 38
    Points
    38
    Par défaut Tester deux objets avec equals()
    Bonjour,

    J'ai un test qui se termine en erreur, j'ai essayé de diminuer le code pour comprendre la source du problème et j'ai gardé la portion que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void testDeleteAttribute() {
    	TypeAttribute typeAttribute = new TypeAttribute(-1, "codeTest1", "descTest1", true, true, 0, 0, 1);
    	TypeAttribute typeAttributeFactis = new TypeAttribute(-1, "codeTest1", "descTest1", true, true, 0, 0, 1);
    assertTrue(typeAttributeFactis.equals(typeAttribute));
    }
    Les deux objets typeAttribute et typeAttributeFactis sont identiques, mais la méthode equals ne me donne pas ce résultat attendu. Est-ce que je me trompe de méthode?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    731
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 731
    Points : 574
    Points
    574
    Par défaut
    Dans ce cas, il faut redéfinir la méthode equals.
    Par défaut, le comportement de equals compare les références des objets sauf objets spécifiques de type String, Integer, ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    Tu sembles souhaiter que deux TypeAttribute soient considérés comme égaux si les 8 attributs que tu initialises dans le constructeur sont égaux. Tu dois donc coder ça en réimplémentant la méthode equals, héritée de Object. Dans ton cas, les attributs que tu veux tester sont tous des types primitifs ou des String, ta méthode equals va donc se limiter à tester l'égalité de chacun d'eux.

    J'attire ton attention sur un point subtil qui peut rendre dingue si on n'y fait pas gaffe : si tu réimplémentes la méthode equals, tu dois normalement redéfinir aussi la méthode hashCode, et lui donner un comportement cohérent avec equals (vois la JavaDoc pour plus de détails). En effet, si tu ne fais pas ça et que tu utilises ton TypeAttribute dans une collection par exemple, tu pourrais te retrouver avec deux instances bien égales mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCollection.contains(monTypeAttribute)
    qui te renvoie false, alors que monTypeAttribute est bien dans la collection ! Ceci parce que certaines collections, notamment HashMap, indexent les objets qu'elles contiennent par leur hash, et comparent donc les résultats de hashCode() pour retrouver les objets.

    Sache enfin que si tu utilises l'EDI Eclipse, ce dernier te facilite la vie puisqu'il peut générer pour toi les deux méthodes equals et hashCode sur la base des attributs que tu lui donnes.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 46
    Points : 38
    Points
    38
    Par défaut
    Merci les amis pour vos réponses

    Je suis resté sur ma faim concernant Eclipse qui pourrait faciliter la génération de méthodes, je cours chercher comment.

  5. #5
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    Citation Envoyé par Danger Voir le message

    Je suis resté sur ma faim concernant Eclipse qui pourrait faciliter la génération de méthodes

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Points : 41
    Points
    41
    Par défaut
    Salut,

    Sur ta faim ? Oh, ce n'est pas bien compliqué. Ouvre ta classe dans Eclipse, clique-droit, et dans le menu "Source", tu trouveras une foule de commandes très intéressantes, dont "Generate equals and hashCode...".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/04/2020, 20h03
  2. Deux objets avec le même identifiant pour une session
    Par nicolas_isi dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/07/2009, 09h11
  3. comparer deux char avec equals
    Par MiXinG dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 01/04/2008, 20h14
  4. Souci pour comparer deux objets avec equals()
    Par xillibit dans le forum Langage
    Réponses: 7
    Dernier message: 30/09/2007, 15h41
  5. Problème comparaison objets avec equals
    Par belkasmi dans le forum Langage
    Réponses: 8
    Dernier message: 01/08/2007, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo