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

API standards et tierces Java Discussion :

modifier le comportement d'ArrayList


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 139
    Par défaut modifier le comportement d'ArrayList
    Bonjour,

    j'ai une telle classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Elmt
    {
         protected String className;
         protected String component_id;
    }
    et une ArrayList contenant des instances de Elmt.
    Le probleme est le suivant: je veux qu'en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList arr = new ArrayList();
    arr.contains("une_chaine");
    que arr.contains("une_chaine"); me retourne true s'il contient un object de type Elmt dont le className serait egal a "une_chaine". Est ce que cela est meme possible?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 139
    Par défaut
    il me semblerai qu'il faut redefinir la methode equals dans Elmt ?!
    je vais essayer...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 139
    Par défaut
    bon....ca marche pas, voila comment elle est ma classe maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    final class Elmt
    {
    	protected String className = null;
    	protected String component = null;
     
    	public boolean equals(Object obj)
    	{ return (true) ? this.className.equals((String)obj) : false; }
    }
    mais ca marche pas!

  4. #4
    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,

    Il faut conserver une logique lorsque tu implémentes la méthode equals() : une chaine de caractères ne peut pas être égal à un objet de type Elmt !!! Cela ne respecte pas les 4 règles de base de equals() :
    • Réflection : x.equals(x) devrait toujours retourner true.
    • Symétrie : Si x.equals(y) retourne true, alors y.equals(x) retournera true.
    • Transitivité : Si x.equals(y) retourne true et y.equals(z) retourne true, alors x.equals(z) retourne true.
    • Consistance : Pour deux référence x et y, tous les appels à la méthode x.equals(y) devront toujours donner le même résultat.
    Or la méthode equals() de la classe String renverra toujours false lorsque tu lui passe un objet Elmt !!!




    Donc la meilleure solution serait de parcourir ta collection pour rechercher l'élément...

    a++

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 139
    Par défaut
    euhh...jai pas tres bien compris, pourquoi toString?...je croyai que lorsqu'on fait ArrayList.contains(Object obj) il se passe appel a la methode equals de chaque element de ArrayList..donc il suffirait de redefinir equals et non toString...ou bien?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 139
    Par défaut
    d'ailleurs en plus...apparement ma methode equals redefinis ds Elmt ne s'appelle meme pas...j'y ai mis dedans un System.out.println("bla bla") pour voir...juste au debut...mais rien ne s'affiche, c'est comme si elle est ignorer!

  7. #7
    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
    Citation Envoyé par Zorgz
    euhh...jai pas tres bien compris, pourquoi toString?...je croyai que lorsqu'on fait ArrayList.contains(Object obj) il se passe appel a la methode equals de chaque element de ArrayList..donc il suffirait de redefinir equals et non toString...ou bien?
    toString() c'est une erreur de saisie !!! Je voulais parler de equals() !!! (j'ai corrigé mon post)

    Ce que je veux dire c'est que tu ne peut pas modifier le comportement de la méthode equals() de la classe String, et que donc il n'y a aucune cohérence entre les deux implémentations de equals (celle de String et celle de Elmt). Donc cela ne peut pas fonctionner...

    a++

    (PS : un parcours via l'itérateur et une comparaison des attributs ce n'est pas vraiment la mer à boire )

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/04/2011, 11h40
  2. printf modifie le comportement
    Par je®ome dans le forum C
    Réponses: 16
    Dernier message: 01/07/2007, 23h06
  3. Modifier le comportement d'un formulaire
    Par Immothep dans le forum Langage
    Réponses: 4
    Dernier message: 21/06/2007, 15h46
  4. Modifier le comportement d'une fenêtre de choix
    Par Nalmo dans le forum Applets
    Réponses: 1
    Dernier message: 03/11/2006, 10h50
  5. [D7] Modifier le comportement d'un FieldKind = fklookup
    Par Débéa dans le forum Bases de données
    Réponses: 4
    Dernier message: 30/01/2006, 12h31

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