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 :

[Débutant] Initialiser les propriétés de tous les objets d'une ArrayList


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut [Débutant] Initialiser les propriétés de tous les objets d'une ArrayList
    Bonjour,

    Je suis débutant complet en Java et en orienté objet en général, c'est donc un peu la galère...

    Voici ce que je voudrais faire. J'ai une classe Projet, que je vais instancier ProjetCount fois, ProjetCount étant un paramètre envoyé par mon site web. Pour chacun de ces objets, j'aimerais initialiser les valeurs de ses propriétés.

    Ce que j'ai fait pour l'instant :

    - comme je ne connais pas ProjetCount à l'avance, je mets mes objets dans une ArrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList PA = new ArrayList(10);
     
    for (int i = 0; i < ProjetCount; i++) {
      PA.add(new Projet());
      }
    - ensuite, je veux affecter des valeurs à ma propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0; i < ProjectCount ; i ++) {
         PA.get(i).maPropriété = MonTableau[i];          
       }
    Et là apparament mon arrayList ne contient que des objets "génériques", pas des Projet, car on me dit "No accessible field named maPropriété found in type Java.lang.Object".

    J'ai cherché un peu sur le forum, et si je comprends bien je dois caster mon type Projet sur mon ArrayList. Alors j'ai fait une fonction qui me ramène un tableau typé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Projet [] CastProjetType(){
       return (Projet []) PA.toArray() ;
      }
    Et là j'ai droit à un ClassCastException.

    J'ai la désagéable impression de ne pas bien comprendre ce que je fais Si quelqu'un pouvait m'expliquer simplement la méthode à suivre pour initialiser mes n objets, ça me dépanerait bien

  2. #2
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Citation Envoyé par Tententai
    Bonjour,

    Je suis débutant complet en Java et en orienté objet en général, c'est donc un peu la galère...

    Voici ce que je voudrais faire. J'ai une classe Projet, que je vais instancier ProjetCount fois, ProjetCount étant un paramètre envoyé par mon site web. Pour chacun de ces objets, j'aimerais initialiser les valeurs de ses propriétés.

    Ce que j'ai fait pour l'instant :

    - comme je ne connais pas ProjetCount à l'avance, je mets mes objets dans une ArrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList PA = new ArrayList(10);
     
    for (int i = 0; i < ProjetCount; i++) {
      PA.add(new Projet());
      }
    Tu ne connais pas projetCount, mais tu sais que projetCount aura une certaine taille définie au moment du parcours, donc tu peux remplacer ton ArrayList par un tableau de Projets...
    Citation Envoyé par Tententai
    - ensuite, je veux affecter des valeurs à ma propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0; i < ProjectCount ; i ++) {
         PA.get(i).maPropriété = MonTableau[i];          
       }
    Et là apparament mon arrayList ne contient que des objets "génériques", pas des Projet, car on me dit "No accessible field named maPropriété found in type Java.lang.Object".
    Forcément, get() te renvoie un Object, qui est en fait un Projet. Il faut caster :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int i = 0; i < ProjectCount ; i ++) {
         ((Projet)PA.get(i)).maPropriété = MonTableau[i];          
       }
    Citation Envoyé par Tententai
    J'ai cherché un peu sur le forum, et si je comprends bien je dois caster mon type Projet sur mon ArrayList. Alors j'ai fait une fonction qui me ramène un tableau typé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Projet [] CastProjetType(){
       return (Projet []) PA.toArray() ;
      }
    Et là j'ai droit à un ClassCastException.

    J'ai la désagéable impression de ne pas bien comprendre ce que je fais Si quelqu'un pouvait m'expliquer simplement la méthode à suivre pour initialiser mes n objets, ça me dépanerait bien
    Tu ne peux pas caster un tableau comme ça, tu auras forcément un tableau d'Object. Si tu veux passer d'un tableau d'Object à un tableau de Projet tu dois le faire à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Object[] tab=PA.toArray();
    Projet[] monTableauDeProjets=new Projet[tab.length];
    for(int i=0;i<tab.length;i++)
    {
      monTableauDeProjets[i]=(Projet)tab[i];
    }
    Ce code suppose qu'il n'y a que des instances de Projet dans ton ArrayList, sinon tu auras un ClassCastException.

    Voila voila

    mavina
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut
    Oui, tous mes objets sont du même type, ça devrait donc marcher.

    Merci pour tes explications, ça me semble plus clair maintenant

  4. #4
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Je voudrais insister sur le fait que tu ne connaisse pas TOI arrayCount ne veut pas dire qu'il change en cours d'execution. Si c'est une valeur donnée par ton utilisateur et qu'il ne modifie pas, alors c'est une valeur qui reste toujours . Tu sais que pour cet utilisateur, tu auras arrayCount Projet a ajouter.

    Or tu utilises un ArrayList. Les tableaux de type Vector, donc redimensionnables, ne sont à utiliser que lors de stoquage d'informations hétérogènes (objets différents) oui si l'on ne connait pas le nombre à l'avance.

    Ici, tu connais le nombre, c'est arrayCount.

    Je te suggère donc d'utiliser un tableau comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Projet[] PA=new Projet[ProjetCount]; // initialisation d'un tableau de Projet de taille ProjetCount
     
    for (int i = 0; i < ProjetCount; i++) {
      PA[i]=new Projet(); // remplissage de chaque case du tableau
      }
    C'est la même chose, sauf que tu gagnes en temps d'execution, le fait de redimensionner un ArrayList coute relativement cher

    bien à toi

    mavina
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    Par défaut
    C'est vrai, utiliser un ArrayList n'est pas nécéssaire en théorie, puisque la taille du tableau est figée. C'était une façon pour moi de contourner un problème lié au langage spécifique sur lequel je travaille (Processing, basé sur Java mais spécialisé en graphisme). Par contre si c'est plus gourmand en temps d'execution, je vais essayer de trouver une solution pour utiliser un tableau.

    Merci pour les infos

  6. #6
    Membre émérite
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Points : 2 411
    Points
    2 411
    Par défaut
    tout est relatif, c'est pas non plus un truc qui va te faire ramer, faut vraiment être pointilleux sur l'optimisation
    Développeur Java / Flex à Shanghai, Chine
    mes publications
    Mon dernier tutoriel : Messages Quit IRC : explications

    La rubrique IRC recrute des redacteurs : contactez moi

    Ce flim n'est pas un flim sur le cyclimse. Merci de votre compréhension.[/SIZE]

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

Discussions similaires

  1. [Batch] Connexion SFTP + download de tous les fichiers ET tous les répertoires
    Par gazza dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 06/03/2014, 13h45
  2. lister tous les membres de tous les groupes AD
    Par fbb53 dans le forum VBScript
    Réponses: 1
    Dernier message: 03/10/2011, 11h24
  3. Réponses: 2
    Dernier message: 29/11/2006, 11h52
  4. Réponses: 9
    Dernier message: 16/10/2006, 16h35
  5. Réponses: 1
    Dernier message: 19/08/2006, 10h27

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