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

Collection et Stream Java Discussion :

créer un objet à partir du type d'une collection


Sujet :

Collection et Stream Java

  1. #1
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut créer un objet à partir du type d'une collection
    bonjour,

    voila j'ai une collection qui peut avoir celon les cas un type différent
    en gros elle est déclarée :
    ArrayList<TableauOrdresAffichage> contenuTableau;

    sauf qu'en réalité les objets qui sont dedans sont des objets qui hérite de TableauOrdresAffichage.
    Or pour mes traitements j'ai besoins de créer un objet qui est exactement du même type que les éléments de la collection.
    Je pensais utiliser l'introspection mais contenuTableau.getClass() renvois le type de la collection et non ce qu'il y a dedans.

    J'espère avoir été claire,
    merci de votre aide
    dam's

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contenuTableau.get(0).getClass()
    Te renvoie le type du premier élément.

  3. #3
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    ok merci,
    maintenant si je veux créer un objet de ce type, c'est bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object element = contenuTableau.get(0).getClass();
    parceque si je fais ça je n'arrive pas à implémenter les méthodes de mon objet, il ne connait que les méthodes de la classe Object.
    merci
    dam's

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Class c = contenuTableau.get(0).getClass()
    Et en fonction de la classe trouvée, tu décide de ce que tu fais.

  5. #5
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    d'accord, je vois comment je peux m'en sortir (étant donné que je sais quel type je peux avoir)
    mais sinon il est pas possible de créer un objet avec la classe récupérée de façon à appeler les méthodes de cette classe par la suite?

    merci en tout cas
    dam's

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu peux toujours utiliser le Class pour en créer un instance mais

    - ça demande de connaitre les parametres éventuels du constructeur
    - Tu devra quand meme faire du typecasting dessus pour le gérer après, sauf si tu veux ensuite accéder à toutes ses propriétés par réflection ou si tu veux le stocker dans la List sans le manipuler.

  7. #7
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    dams78 : Pourrais-tu Expliquer ce que tu veux faire précisément ?

    a++

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    alors je vais essayer d'expliquer ça clairement...
    donc j'ai une collection d'un type Toto qui hérite d'un type GrandToto
    je récupère cette collection dans une session, donc je ne connais pas le type Toto, je sais seulement qu'il hérite de GrandToto, c'est pour ça que je déclare la collection avec le type GrandToto

    je fais différent traitement sur la collection, sachant que quelque soit le type de Toto, il possède un attribut String attribut1, ce qui me permet notamment de trier la collection dessus
    et c'est là ou apparait mon problème, je suis obligé de faire le tri avec la méthode ToCompare, mais de la classe Toto et non GrandToto, car la fonction getAttribut1 sur l'objet GrandToto me renvoyait null
    il faut donc que je créer des objets Toto
    d'où mon envie de pouvoir récupérer ce type

    je sais pas si c'est très claire...
    dam's

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je pense que tu t'égares sur une fausse piste et que ton héritage est incorrect.


    Pourrait-on voir le code de ces classes Toto et GrandToto... en particulier le code du compareTo() et tout ce qui est lié à l'attribut.

    a++

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    bien sûr, je voulais pas trop en mettre pour pas faire genre "faites mon boulot"...

    donc la classe mère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class TableauOrdresAffichage implements Comparable {
     
    	public int compareTo(Object arg0) {
    		// TODO Raccord de méthode auto-généré
    		return 0;
    	}
    en gros ya rien dedans, j'avais mis l'attribut Attribut1 dedans au début, mais j'ai arrêter pour le problème que j'ai cité plus tôt

    maintenant une classe fille :
    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
     
     
    public class TableauOrdresAffichage_NatureCaracteristique extends TableauOrdresAffichage {
     
    	private String attribut1;
    	private String attribut2;
     
    	public int compareTo(Object obj) {
    		TableauOrdresAffichage_NatureCaracteristique unTableauOrdresAffichage = (TableauOrdresAffichage_NatureCaracteristique) obj;
    		int nb1 = Integer.valueOf(this.attribut1);
    		int nb2 = Integer.valueOf(unTableauOrdresAffichage.attribut1);
    		if (nb1 > nb2)  return 1; 
    		else if(nb1 == nb2) return 0; 
    		else return -1; 
    	}
     
    	/**
             * @param attribut1
             * @param attribut2
             */
    	public TableauOrdresAffichage_NatureCaracteristique(String attribut1, String attribut2) {
    		this.attribut1 = attribut1;
    		this.attribut2 = attribut2;
    	}
    plus les accesseurs...

    je met aussi ma collection que je récupère via une session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ArrayList<TableauOrdresAffichage> contenuTableau;
    contenuTableau = (ArrayList<TableauOrdresAffichage>) getFromSession(request, "contenuTableau");
    j'espère que c'est compréhensible
    dam's

  11. #11
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Je ne comprend pas : puisque tu redéfinie bien la méthode compareTo() dans la classe fille, elle devrait bien être appelée...

    Quel est le problème précisément ?

    a++

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 3 100
    Points
    3 100
    Par défaut
    c'est bon j'ai trouvé, en fait je suis trop niais,
    tu m'as mis la puce à l'oreille en me parlant de mon héritage
    en gros dans la classe mère j'avais l'attribut Attribut1
    mais dans les classes filles je le redéfinissait au lieu d'utiliser super, du coup quand je fesais mon CompareTo dans la classe mère il regardait pas le bon Attribut1

    du coup j'ai plus besoins de l'introspection et j'utilise bien l'héritage comme il faut

    merci pour votre patience
    dam's

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/12/2014, 11h10
  2. Créer un objet à partir d'une BDD
    Par Jean-Marc68 dans le forum C#
    Réponses: 3
    Dernier message: 10/02/2013, 20h06
  3. Réponses: 3
    Dernier message: 23/04/2007, 15h53
  4. 2 objets de même type dans une classe
    Par _R3nO_ dans le forum Hibernate
    Réponses: 2
    Dernier message: 28/02/2007, 16h12
  5. Réponses: 2
    Dernier message: 30/01/2007, 09h02

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