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

Java Discussion :

Fonctionnement de compareTo()


Sujet :

Java

  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 234
    Par défaut Fonctionnement de compareTo()
    Salut,

    Que se passes t-il si lp est null lorsque la méthode compareTo est utilisée ? Je suppose que cela provoque une erreur. Mais comment reformuler le traitement alors ? En sortant un -1 si lp == null ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	public int compareTo( LivrePret lp )
    	{
    		// On peut ajouter d'autres critères d'identicité comme l'isbn
    		return getTitre().compareTo( lp.getTitre() ) ;
    	}

  2. #2
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    Si lp est null, t'obtiens un joli nullPointerException.

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2008
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 234
    Par défaut
    Exacte mais quelle valeur devrais-je renvoyer si lp est justement null ?

    J'ai trouvé cette page assez exhaustive sur le sujet et on y mentionne ceci :
    http://www.javapractices.com/topic/TopicAction.do?Id=10
    Object : use compareTo. (Note that possibly-null fields present a problem : while x.equals(null) returns false, x.compareTo(null) will always throw a NullPointerException)
    Cela sous-entendrais t-il qu'il faudrais systématiquement tester si une référence vers un objet est null avant de faire qu'une compareTo est enclenché (dans un Collections.sort() par exemple) ?

  4. #4
    Membre émérite Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Par défaut
    A priori, l'attribut d'un objet qui te sert de comparaison ne doit jamais être null.
    C'est dans le constructeur de l'objet qu'il est bon de mettre en place ce genre de protection. En reprenant ton exemple du LivrePret et en supposant que deux livres différents ne peuvent avoir le même titre (Rien n'est moins sur cela dit).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String titre;
     
    public LivrePret(String titre) {
    if(titre == null) {
    throw new IllegalArgumentException("titre ne peut etre null");
    }
    this.titre = titre;
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Je pense qu'effectivement, tu ne dois pas avoir à traiter le cas du paramètre à null.

    Quand tu appliques les méthodes de tris, celle-ci vont s'appuyer sur la méthode compareTo pour savoir quel objet est plus grand que tel autre.

    Ces méthodes prennent un objet de la collection à trier et applique la méthode compareTo à l'autre objet en paramètre.
    Dans ton code, tu peux effectivement traiter si le paramètre est à null mais par contre si c'est l'objet d'instance qui sert à appliquer la méthode qui est à null, tu ne peux rien faire.

    Donc pour un fonctionnement identique entre le paramètre et l'objet sur lequel est appliqué la méthode, il ne faut pas traiter le cas du null.

    Si par contre, c'est toi seulement qui appel la méthode compareTo, tu peux faire toi même tes tests de nullité sur l'objet sur lequel est appliqué la méthode.

    Dans le cas où tu veux vraiment faire du tri et que tes objets peuvent être à null tout en considérant que null==null et que null est plus petit que le reste, tu peux peut être travailler avec la classe comparator et la méthode compare.
    Cette méthode contient en paramètre les 2 données à tester. Donc le null peut être tester pour chacun d'eux.

    Bon courage

    Arnaud

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/06/2003, 17h51
  2. Réponses: 5
    Dernier message: 14/05/2003, 15h51
  3. [Turbo Pascal] TP7 fonctionne en QWERTY
    Par callahan dans le forum Turbo Pascal
    Réponses: 9
    Dernier message: 08/02/2003, 22h49
  4. Prb de fonctionnement dans SaveDialog avecInitialDir
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 12/12/2002, 22h46
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10

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