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 :

Classe générique et comparaison


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Par défaut Classe générique et comparaison
    Bonjour,

    J'ai implementé une version d'un Tas binaire avec des Integer et je souhaite en faire une classe générique.
    J'ai donc re-écrit ma classe en Tas<Type_t> au lieu de Tas et j'ai modifié les types en conséquence.

    Mais je bloque sur la comparaison des Type_t, l'éditeur me signale une erreur ce qui semble naturel étant donné qu'il ne sait rien du
    Type_t et donc il ne sait pas faire de comparaison.

    Mais je ne sais pas comment m'en sortir ...

    Par exemple pour ma fonction bubbleUp() qui échange les termes du Tas :
    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
     
    public class Tas<Type_t> {
     
    	private ArrayList<Type_t> mlist;
     
    	public Tas() {
    		mlist = new ArrayList<Type_t>();
    		mlist.add(null); // indices commence a 1
    	}
     
    	public void insert(Type_t item) {
    		mlist.add(item);
    		bubbleUp(mlist.size() - 1);
    	}
     
    	/**
             * bubbleUp : 
             * Echange la derniere valeur du tableau avec son parent
             * et remonte jusqu'à restaurer la proprieté du Tas :
             * Val [i] <= tous ses enfants
             */
    	private void bubbleUp(int last) {
    		//System.out.println("bubbleUp "+ last );
    		//System.out.println("heap :" + this);
     
    		if(last ==  1) return; // tete
    		int parent = last>>1;
     
    		Type_t parentVal = mlist.get(parent);
    		Type_t lastVal = mlist.get(last);
     
    		if(lastVal.compareTo(parentVal)) { // ici l'éditeur refuse de compiler
    			mlist.set(parent, lastVal);
    			mlist.set(last, parentVal); 
    		}
    		bubbleUp(parent);
    	}
    	...

  2. #2
    Membre extrêmement actif
    Avatar de MarieKisSlaJoue
    Homme Profil pro
    Ingénieur Cloud
    Inscrit en
    Mai 2012
    Messages
    1 145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Roumanie

    Informations professionnelles :
    Activité : Ingénieur Cloud
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 145
    Billets dans le blog
    20
    Par défaut
    En lui disant comment faire la comparaison. La classe que tu veut comparer doit implémenter l'interface Comparable qui te demandera de redéfinir la méthode compareTo. Et donc tu implémentera une méthode de comparaison de tes objet entre eux.
    Ce post à été écrit par un panda
    Apollo 11 - AGC revue de code
    -- qwerty keybord

  3. #3
    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
    Salut,


    Ta classe requiert que le type "Type_t" qu'elle va manipuler soit "Comparable",
    Il faut donc conserver ce critère dans la description de ta classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Tas<Type_t extends Comparable<Type_t>> {

    Sinon une autre solution serait d'initialiser ta classe avec un Comparator<Type_t>, et d'utiliser ce dernier pour les comparaisons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Tas<Type_t> {
    	private final Comparator<Type_t> comparator;
     
    	public Tas(Comparator<Type_t> comparator) {
    		this.comparator = comparator;
    	}


    a++

    PS : par convention le nom des types paramétrés prend une seule lettre en majuscule (Type_t T).

  4. #4
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Par défaut
    Merci, je comprend mieux

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

Discussions similaires

  1. Utilisation d'une classe générique
    Par bandit_debutant dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2006, 16h54
  2. Réponses: 3
    Dernier message: 05/10/2006, 17h15
  3. [C# 2.0] Un exemple de classe générique qui ne compile pas.
    Par Pierre8r dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/05/2006, 11h11
  4. [C#][ADO] Classe Générique ADO
    Par tscoops dans le forum Accès aux données
    Réponses: 2
    Dernier message: 15/11/2005, 14h21
  5. [Generics] Classe générique
    Par norkius dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2004, 15h57

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