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 :

Vérifier si 2 objets sont du même type


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut Vérifier si 2 objets sont du même type
    Bonjour

    HashMap<String,Integer> c = new HashMap<String, Integer>();
    HashMap<String,Double> e = new HashMap<String, Double>();
    System.out.println(t.getClass().equals(c.getClass()));

    Voila je cherche un moyen de savoir si 2 objet sont de la meme classe, cette methode marche, mais ne permet pas de differencier le fait, quelle ne sont pas construite avec les meme types, ce qui est un probleme pour le programme que je fais (je convertis un code c# en java...)
    Donc y'a t-il un moyen de verifier si les 2 hashmap/Arraylist.... sont differente en prenant compte leur type ?

    Merci

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    En C# je ne sais pas mais en java cela peut être très compliqué si tu veux faire une méthode qui marche à tous les coups. Entres autres joyeusetées, il peut très bien y avoir des types génériques de types génériques.

    De toutes façons il devrait être possible de se débrouiller avec Class.getTypeParameters.

    Attention toutefois que les génériques C# et Java ne sont pas équivalents. Dans vos principes de traduction, peut être serez-vous amenés à trouver des formes qui expriment une meilleure fidélité à l'original qu'une simple générique C# générique java.

    Enfin, par rapport à ton code, l'égalité simple entre deux classes peut simplement se vérifier par classe1 == classe2, pas besoin de equals.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Deja merci pour ta

  4. #4
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Deja merci pour ta reponse qui m'apporte des idée ^^

    Sinon comment faire:

    TypeVariable[] tv = HashMap.class.getTypeParameters();
    me retourne K et V
    Comment faire pour appliquer cette fonction a une hashmap créé auparavant ?

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Heu je me suis un peu planté, c'était juste pour voir si tu avais bien compris

    Pour ton cas je pense qu'il faut plutot passer par les Field et Method du paquetage java.lang.reflect, qui propose des méthodes similaires pour accéder aux types génériques déclarés. Si tes variables sont locales, il n'existe aucun moyen. Et pour les types exacts au runtime comme en C#, aucun moyen non plus.

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


    En Java pour plusieurs raisons les types paramétrées sont perdus à l'exécution (lire : Les Generics ne sont pas des Templates comme les autres !).

    Donc pour une classe Generics la méthode getTypeParameters() retournera les type de base (donc ici K, V) avec leurs types de bases (Object dans ce cas).

    Il n'y a malheureusement aucun moyen de connaitre le paramétrage d'une classe generics, à moins que ce paramétrage ne soit forcé lors de l'héritage, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    class StringIntMap extends HashMap<String,Integer> {
    }

    a++

    PS : Juste une question : pourquoi as-tu besoin de cela ?

  7. #7
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Par défaut
    Bonjour
    Je travaille sur un projet d'optimisation de code. Mais avant d'arriver a ce but, le projet doit etre convertit en java.
    Merci pour votre aide. J'ai envoyé un mail a la personne qui la developpé en c#, pour voir si au niveau de ces test il y a un risque que des elements avec des types générique different soit placée, en esperant que non...
    ^^

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/03/2015, 09h53
  2. Récupérer objets d'un même type dans une classe
    Par Madfrix dans le forum Langage
    Réponses: 12
    Dernier message: 19/02/2008, 13h17
  3. 2 objets de même type dans une classe
    Par _R3nO_ dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/02/2007, 16h12
  4. Réponses: 1
    Dernier message: 10/02/2007, 20h30

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