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

Langage Java Discussion :

Interface comparable, qu'est-ce que c'est ?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut Interface comparable, qu'est-ce que c'est ?
    Salut

    Dans ma classe je dois implémenter compareTo, mais je ne vois pas l'utilité d'écrire implements Comparable, car ça fonctionne si je me contente d'écrire ma méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public int compareTo(Object o) {
     
            int result = -1;
            Location x = (Location)o;
     
            if (o instanceof Location) result = CodeInventaire.compareTo(x.obtCodeInventaire());
     
            return result;
        }
    C'est pour gérer les exception, car je pourrais lui passer un objet null .. Mais je lis souvent qu'il faut implémenter l'interface comparable, mais je ne vois pas pourquoi, si quelqu'un pourrait me l'expliquer svp

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Re: Interface comparable, qu'est-ce que c'est ?
    Citation Envoyé par AsmCode
    Dans ma classe je dois implémenter compareTo, mais je ne vois pas l'utilité d'écrire implements Comparable, car ça fonctionne si je me contente d'écrire ma méthode...
    Euh... le problème me semble plus général non ? Ce n'est pas uniquement avec Comparable que tu ne comprend pas, mais c'est l'utilisation des interfaces en général non ?
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Ben non je sais ce que c'est qu'une interface j'en implémente une pour faire une liste chainée, c'est juste que je ne vois pas la différence entre redéfinir la méthode de cette interface et redéfinir celle de Object

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Object n'a pas de methode compareTo(). Implementer l'interface Comparable permet d'utiliser ta classe avec des methodes qui attendent des Comparable justement. Par exemple pour trier une liste tu peux utiliser Collections.sort() si ta List contient des objets qui sont du type Comparable. Si tu n'implementes pas cette interface, la bibliotheque n'aura aucun moyen d'etre sure que tu implementes bien compareTo().
    Romain Guy
    Android - Mon livre - Mon blog

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Ok Mais je l'ai déclaré avec implements Comparable mais dans ma liste chainée il me dit que il trouve pas la méthode compareTo pour le type T

    j'ai essayé T extends Comparable dans ma classe et il me renvoie un warning de la mort comme quoi c'est unsafe

  6. #6
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    On peut voir ton code ? Il semblerait que tu as mal utilise les generics.
    Romain Guy
    Android - Mon livre - Mon blog

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Points : 61
    Points
    61
    Par défaut
    Voici ma classe chainée:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    public class ListeChainee<T extends Comparable> implements ADTListe<T> &#123;
     
        private Noeud<T> tete;
        private Noeud<T> fin;
        private int nbElements;
     
        ListeChainee&#40;&#41; &#123;
     
            tete = new Noeud<T>&#40;&#41;;
     
        &#125;
     
        ListeChainee&#40;T element&#41; &#123;
     
            this&#40;&#41;;
            fin = new Noeud<T>&#40;element&#41;;
            fin.majSuivant&#40;tete&#41;;
            tete = fin;
            nbElements = 1;
     
        &#125;
     
        /**
         * Verification si la liste contient ou non des élements
         * @return true si la liste est vide, sinon false
         */
        public boolean estVide &#40;&#41; &#123;
     
            return &#40;nbElements == 0&#41;;
     
        &#125;
     
        /**
         * Retirer tous les élements de la liste. La liste sera vide
         * 
         */
        public void viderListe &#40;&#41; &#123;
     
            tete = fin;
            nbElements = 0;
     
        &#125;
     
        /**
         * Retourne le nombre d'éléments de la liste
         * @return Nombre d'élements &#40;int&#41;
         */
        public int nbElements &#40;&#41; &#123;
     
            return nbElements;
     
        &#125;
     
        /**
         * Ajoute l'élément au début de la liste
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         */
        public T ajouterDebut &#40;T element&#41; &#123;
     
            Noeud<T> nouveau;
            nouveau = new Noeud<T>&#40;element&#41;;
     
            nouveau.majSuivant&#40;tete&#41;;
            tete = nouveau;
     
            nbElements++;
     
            return tete.obtenirElement&#40;&#41;;
     
        &#125;
     
        /**
         * Ajoute l'élément à la fin de la liste
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         */
        public T ajouterFin &#40;T element&#41; &#123;
     
            Noeud<T> nouveau;
            nouveau = new Noeud<T>&#40;element&#41;;
     
            nouveau.majSuivant&#40;fin.obtenirSuivant&#40;&#41;&#41;;
            fin.majSuivant&#40;nouveau&#41;;
            fin = nouveau;
     
            nbElements++;    
     
            return fin.obtenirElement&#40;&#41;;
     
        &#125;
     
        /**
         * Ajoute l'élément en ordre croissant &#40;avec compareTo&#41;
         * @return la référence de l'objet inséré ou null s'il y a eu un probleme
         **/
        public T ajouterOrdonne &#40;T element&#41; &#123;
     
            Noeud<T> tmp = tete;
            Noeud<T> precedent = null;
            Noeud<T> nouveau;
     
            while &#40;tmp.obtenirSuivant&#40;&#41; != null && element.compareTo&#40;tmp.obtenirElement&#40;&#41;&#41; > 0&#41; &#123;
     
                precedent = tmp;
                tmp = tmp.obtenirSuivant&#40;&#41;;
     
            &#125;
     
                if &#40;precedent == null&#41; &#123;
     
                    ajouterDebut&#40;element&#41;;
                    tmp = tete;
     
                &#125; else &#123;
     
                    nouveau = new Noeud<T>&#40;element&#41;;            
                    nouveau.majSuivant&#40;tmp&#41;;
                    precedent.majSuivant&#40;nouveau&#41;;
                    tmp = nouveau;
     
                    nbElements++;   
                &#125;
     
            return tmp.obtenirElement&#40;&#41;;
     
        &#125;
     
    &#125;
    Il me sort un warning comme quoi c'est unsafe. Mais ça compile.

    Et voici ma classe Location c'est l'objet que je vais mettre dans ma liste chainee


    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    public class Location implements Comparable<Location> &#123;
     
        // Statique, car c'est la même chose pour toute les instances de Location.
        private static SimpleDateFormat formatter = new SimpleDateFormat&#40;"dd.MM.yyyy"&#41;;
     
        private String CodeInventaire;
        private String Emprunteur;
        private Date DateLocation;
     
        public Location&#40;String CodeInventaire, String Emprunteur&#41; &#123;
     
            this.CodeInventaire = CodeInventaire;
            this.Emprunteur = Emprunteur;
            this.DateLocation = new Date&#40;&#41;;
     
        &#125;
     
        public String obtCodeInventaire&#40;&#41; &#123;
     
            return CodeInventaire;
     
        &#125;
     
        public String obtEmprunteur&#40;&#41; &#123;
     
            return Emprunteur;
     
        &#125;
     
        public String obtDateLocation&#40;&#41; &#123;
     
            return formatter.format&#40;DateLocation&#41;;
     
        &#125;
     
        public boolean equals&#40;Object obj&#41; &#123;
     
            return CodeInventaire.equals&#40;&#40;&#40;Location&#41;obj&#41;.obtCodeInventaire&#40;&#41;&#41;;
     
        &#125;
     
        public int compareTo&#40;Location unOutil&#41; &#123;
     
            return CodeInventaire.compareTo&#40;unOutil.obtCodeInventaire&#40;&#41;&#41;;
     
        &#125;
     
     
        public String toString&#40;&#41; &#123;
     
            return obtCodeInventaire&#40;&#41; + "\n" + obtEmprunteur&#40;&#41; + "\n" + obtDateLocation&#40;&#41;;
     
        &#125;
     
    &#125; // Location

  8. #8
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Un warning unsafe signifie juste que quand tu utilises des generics certaines operations ne peuvent pas etre garanties type-safe. Ce n'est pas forcement une erreur de programmation. A quelle ligne as-tu ce warning exactement ? (Au fait, Java propose deja une liste chainee - a moins que ce ne soit un exercice
    Romain Guy
    Android - Mon livre - Mon blog

Discussions similaires

  1. est-ce que python est ce que je cherche
    Par SILICONE dans le forum Général Python
    Réponses: 5
    Dernier message: 21/12/2007, 15h23
  2. Qu'est ce que c'est qu'un Trigger ?
    Par shingo dans le forum Requêtes
    Réponses: 2
    Dernier message: 22/10/2003, 23h09
  3. Un daemon qu'est ce que c'est exactement ?
    Par CedricYhuel dans le forum Administration système
    Réponses: 5
    Dernier message: 01/08/2003, 12h56
  4. Qu'est ce que c'est : Le GateA20 ?
    Par le mage tophinus dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 24/02/2003, 16h09
  5. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 12h23

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