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 :

Erreur "Add unimplemented methods"


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut Erreur "Add unimplemented methods"
    Bonjour,

    J'ai un problème avec une partie de mon code que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import java.util.Comparator;
     
        Collections.sort(elementsTries, new Comparator()
            {
                public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
                    // TODO Auto-generated method stub
                    return ((String)e1.getValue()).compareTo((String)e2.getValue());
            }
        });
    Il est indiqué
    Add unimplemented methods
    et lorsque j'effectue ce qui est demandé, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Collections.sort(elementsTries, new Comparator()
            {
                public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
                    // TODO Auto-generated method stub
                    return ((String)e1.getValue()).compareTo((String)e2.getValue());
            }
     
                @Override
                public int compare(Object arg0, Object arg1) {
                    // TODO Auto-generated method stub
                    return 0;
                }
        });
    Suis-je obligé de faire ça ?
    Et lorsque mon code se lance, quelle méthode est utilisée parmi les deux compare ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Expert MDE
    Inscrit en
    Janvier 2008
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert MDE
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 183
    Par défaut
    Hello,

    La méthode 'compare' de 'Comparator' compare des 'Object', pas des Map de String...

    Tu es donc obligé de rajouter la méthode avec la bonne signature (on la remarque car elle porte l'annotation 'Override'.
    C'est celle-ci qui sera appelée, il faut donc que tu appelles l'autre et castant tes objets (leur donnant le bon type):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Collections.sort(elementsTries, new Comparator()
        	{
    			public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
    				return ((String)e1.getValue()).compareTo((String)e2.getValue());
    		}
     
    			@Override
    			public int compare(Object arg0, Object arg1) {
    				return compare((Map.Entry<String, String>) arg0, (Map.Entry<String, String>) arg1) 
     
    			}
        });
    Par souci de lisibilité, tu peux aussi renommer la méthode de comparaison des Maps (en l'appelant par exemple 'compareMapOfStrings').

    Tu peux aussi enchainer les Casts:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
    			public int compare(Object arg0, Object arg1) {
    				return ((String)((Map.Entry<String, String>)e1).getValue()).compareTo((String)((Map.Entry<String, String>)e2).getValue());
    				}
    Mais ça a tendance à rendre le code moins lisible.

    Prochaine!

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Ou alors simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    new Comparator<Map.Entry<String, String>>()
    {
      public int compare(Map.Entry<String, String> e1, Map.Entry<String, String> e2) {
        // TODO Auto-generated method stub
        return e1.getValue().compareTo(e2.getValue());
      }
    }
    Si tu ne mets pas le <Map.Entry<String, String>> cette syntaxe ne peut pas deviner que c'est ça que ton objet est censé comparer. En l'absence, il applique la règle sans génériques, donc avec des Object.

    En Java 1.8, les lambda permettront une syntaxe bien plus concise qui déduira toute seule ce que tu cherches à comparer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2010
    Messages : 434
    Par défaut
    Ok merci à vous deux. J'ai résolu mon problème.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/04/2010, 15h33
  2. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

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