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 :

Généricité et interface Comparable


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 80
    Points : 61
    Points
    61
    Par défaut Généricité et interface Comparable
    Bonjour,

    J'ai un problème avec une classe generique qui implémente l'interface comparable.

    J'ai trouvé une solution, mais il y a des warning qui s'affichent :
    j'ai gardé que le code utile.

    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
     
    @SuppressWarnings("rawtypes")
    public abstract class AbstractSommet<T extends Comparable>  implements Comparable{
    	T sommet;
    	private int dateDebut;
     
    	/**
             * @return the sommet
             */
    	protected T getSommet() {
    		return sommet;
    	}
     
     
    	@SuppressWarnings("unchecked")
    	@Override
    	public int compareTo(Object o) {
    		AbstractSommet<?> c = (		AbstractSommet<?>) o;
    		if(this.dateFin < c.dateFin)
    			return -1;
    		if(this.dateFin > c.dateFin)
    			return 1;
    		return this.sommet.compareTo((T) c.getSommet());
    	}
     
    }

    Si je met cela, il n'y a plus de warning, mais je n'arrive pas à comparer autre chose que l'élément générique et je ne vois pas à quoi cela pourrai servir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public abstract class AbstractSommet<T extends Comparable<T>>  implements Comparable<T>{
    	T sommet;
    	private int dateDebut;
     
     
    	@Override
    	public int compareTo(T o) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
     
    }
    Je cherche plus à comprendre qu'à vraiment trouver une solution, puisque actuellement cela marche.

    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 178
    Points : 20 623
    Points
    20 623
    Par défaut
    Hello,

    ça sert à faire une class ShinySommet extends AbstractSommet<ShinySommet> qui donc se retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public int compareTo(ShinySommet sommet)
    c'est-à-dire qui peut se comparer à elle-même.

    De manière générale, les génériques ne sont pas compliqués au point de pouvoir exprimer "type remplaçable qui est remplacé par le type de la sous-classe de la classe en cours." Du coup, faire Comparable, de sorte que les implémentations puissent se comparer à elles-même, a dû se faire en bricolant un peu.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 80
    Points : 61
    Points
    61
    Par défaut
    je n'ai pas vraiment compris votre réponse. Dans votre exemple, j'ai l'impression que c'est le serpent qui se mort la queue. Dans ShinySommet extends abstractSommet<ShinySommet> il y a donc un ShinySommet sommet comme variable d'état, qui se définit elle-même dans cette propre classe. Je n'ai jamais encore vu cela.

    En gros, c'est normal d'avoir des warning, du moment que cela fonctionne ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2007
    Messages : 80
    Points : 61
    Points
    61
    Par défaut
    Finalement, j'ai trouvé la solution ici : https://miashs-www.u-ga.fr/prevert/P...enericite.html

    avec cela, tous fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract class AbstractSommet<T extends Comparable<T>>  implements Comparable<AbstractSommet<T>> {}
    J'ai été un peu induit en erreur par les proposition de correction d'eclipse.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    septembre 2004
    Messages
    12 178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : septembre 2004
    Messages : 12 178
    Points : 20 623
    Points
    20 623
    Par défaut
    Non, la solution c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public abstract class AbstractSommet<T extends AbstractSommet<T>>  implements Comparable<T>{
    Mais effectivement, je n'avais pas vu que ce n'était pas ce que tu avais déjà. My bad.

    Mais ça ne marchait pas si mal non plus avec <T extends Comparable<T>>, et sans warning.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/02/2007, 08h53
  2. Interface comparable, qu'est-ce que c'est ?
    Par AsmCode dans le forum Langage
    Réponses: 7
    Dernier message: 15/03/2006, 18h39
  3. Réponses: 8
    Dernier message: 01/03/2006, 18h41
  4. [Débutant]interface comparable et methode compareto
    Par mariogarcia dans le forum Langage
    Réponses: 5
    Dernier message: 11/01/2006, 09h49
  5. [Language]Pb implementation de l'interface Comparable
    Par mawashee dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2005, 16h49

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