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 :

Override de equals()


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 10
    Par défaut Override de equals()
    Comment ferriez-vous pour override la méthode equals(Obj o) pour qu'elle compare 2 Points d'une Classe Point ayant pour constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Point() {
    		x = 0;
    		y = 0;
    	}
    ...les X et Y sont lu à partir d'un fichier de X,Y à l'aide de la Classe Scanner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void lire(Scanner reader)? {
    		this.x = reader.nextInt();
    		this.y = reader.nextInt();
     
    	}
    Voici ma tentative d'override:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public boolean equals(Point p) {
    		if((x == ((Point)p).x && y == ((Point)p).y)) {
    			return true;
    		}else {
    			return false;
    		}
     
    	}

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 131
    Par défaut
    salut,

    On ne voit pas tous le code mais je dirai basiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
    public boolean equals(Point p) {
    	return this.x == p.x && this.y == p.y
    }

  3. #3
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    Equals prend un Object en paramètre, il faut d'abord valider la nullité et le type, puis caster et enfin comparer les données des objets.

    Aussi, equals doit s'accompagner d'un hashcode, ça fait partie de son contrat.

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    Il y a une véritable guerre de religion sur equals
    le paramètre est un objet et on va tester si on peut d'abord effectuer le transtypage (cast)
    deux options s'affrontent:
    - ceux qui comparent la classe courante à celle de l'objet passé en paramètre (au moyen de getClass())
    - ceux qui veulent passer par un instanceof pour tester au préalable les capacités de cet objet
    je fais partie de cette deuxième secte

  5. #5
    Membre Expert Avatar de yildiz-online
    Homme Profil pro
    Architecte de domaine
    Inscrit en
    Octobre 2011
    Messages
    1 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de domaine

    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 447
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    - ceux qui comparent la classe courante à celle de l'objet passé en paramètre (au moyen de getClass())
    - ceux qui veulent passer par un instanceof pour tester au préalable les capacités de cet objet
    La différence entre instanceof et getclass est que getclass nécessite de tester la nullité au préalable, ce n'est pas le cas de instanceof, qui renvoie false en cas de null.

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Il y a une autre différence entre getClass() et instanceof : ce dernier acceptera les classes filles, ce qui peut mettre à mal la symétrie requise par les spécifications de equals().

    Sinon l'implémentation de hashCode() n'est pas requise lorsqu'on redéfini equals(). C'est l'inverse 😉

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/08/2011, 11h41
  2. Dictionary override Equals
    Par olibara dans le forum C#
    Réponses: 2
    Dernier message: 12/02/2011, 16h27
  3. Overrides de la methode "equals"
    Par docv266 dans le forum Langage
    Réponses: 4
    Dernier message: 14/11/2008, 19h03
  4. override equals dans une interface
    Par TheCaribouX dans le forum C#
    Réponses: 11
    Dernier message: 14/04/2008, 20h11
  5. Problème d'override...
    Par NeoMan dans le forum Langage
    Réponses: 6
    Dernier message: 10/03/2003, 14h21

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