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 :

Java reflect- égalite de deux objets Java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut Java reflect- égalite de deux objets Java
    Bonjour :

    Je cherche à réaliser à l'aide de Java reflect l'égalité de 2 Object Java .
    Comment réaliser un equals() en profondeur sur des Collections/List ...
    (et par le meme temps éviter le unchecked classe exception)

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


    Les Collections/List implémentent déjà la méthode equals()...
    Après reste à savoir ce que tu entends par "en profondeur" !

    a++

  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
    Par ailleurs, c'est quoi, ça, "unchecked class exception" ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut

    Ce que je voudrais faire par exemple en Java reflect c'est comparer si deux object Customer sont égaux
    . (c'est à dire je voudrais comparer la valeur de name, des chacun des éléments de List<Item>,List<Waranty> etc ...)



    Exemple :
    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
    class Customer(){
    private String name;
    List<Item> items;
    }
     
    class Item(){
    int quantite;
    float price;
    List<Waranty> waranty;
    }
     
    class waranty(){
    String name;
    int duration;
    String price;
    }

  5. #5
    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
    Il ne faut pas passer par l'API de reflection, mais implémenter les méthodes hashCode()/equals()...



    Pourquoi et comment redéfinir la méthode equals() ?
    Pourquoi et comment redéfinir la méthode hashCode() ?

    a++

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    • et tu fais ca comment pour analyser N sous List<?>

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par artaud1 Voir le message
    • et tu fais ca comment pour analyser N sous List<?>

    Si les éléments de la liste implémentent correctement equals et ahshcode (voir message d'adiguba)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    liste1.equals(liste2)   // compare si les listes on les mêmes éléments dans le même ordre
    liste1.containsAll(liste2)   // s'assure que tous les éléments de liste2 sont dans liste 1
    liste1.containsAll(liste2) &&  liste2.containsAll(liste1) // les listes sont les même à l'ordre et la quantité près
    La reflection, oubliez, c'est bien souvent utilisé à tord et à travers par des gens qui ne veulent pas utiliser ce que les apis leur fournissent déjà.

    Vous implémentez equals et hashcode dans votre Customer, vous pourrez alors tester leur égalité.
    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
     
    class Customer(){
    private String name;
    List<Item> items;
    public boolean equals(Object o){
       if (o instanceof Customer){
          Customer c = (Customer) o;
          return c.name.equals(name) && c.items.equals(items);
       }
       return false;
    }
    public int hashCode(){
       return name.hashCode() ^ items.hashCode();
    }
     
    }
    //etc

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    en gros il faudrait liste tous les champs primitifs et faire un equals dessus ... c'est assez lourd si j'ai des très gros bean .
    Pas un autre moyen + industrielle?

    Je ne veux pas écrire dans la classe Customer.
    Je souhaiterais un classe générique .

  9. #9
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Citation Envoyé par artaud1 Voir le message
    • et tu fais ca comment pour analyser N sous List<?>
    equals() et hashcode() étant de la classe Object, je ne vois pas le problème.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 11
    Par défaut
    en utilisant le BeanWrapper de Spring ca pourrait marcher ?

Discussions similaires

  1. Tester l'égalité de deux objets Range
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/06/2010, 15h11
  2. Echange d'objet java entre deux applications
    Par m3allem001 dans le forum Langage
    Réponses: 3
    Dernier message: 03/04/2009, 13h20
  3. [Excel][VBA][Java] Appeler un objet java
    Par ay_pepito dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/07/2005, 15h46
  4. [Java] Héritage et flux d'Objet
    Par guejo dans le forum CORBA
    Réponses: 2
    Dernier message: 22/02/2005, 11h14
  5. [SAX] Passer d'objet java en fichier XML?
    Par spoutyoyo dans le forum Format d'échange (XML, JSON...)
    Réponses: 15
    Dernier message: 05/01/2005, 08h31

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