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(e)][Reflection] Introspection et creation de tableau


Sujet :

API standards et tierces Java

  1. #1
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut [débutant(e)][Reflection] Introspection et creation de tableau
    Bonjour, j'ai un objet d'un certain type :

    unObject : Xxxxxx;

    et j'aimerais construire un tableau statique (c'est a dire pas un Array ou un Vector, mais un []) de ce type.

    unTableauDeObject[] : Xxxxxx

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    unTruc : Truc;
    unMachin : Machin;
     
    unTableauTruc [] : Truc = (Truc[])constructTableau(unTruc); // provoque ClassCastException 
    unTableauMachin[] : Machin = (Machin[])constructTableau(unMachin); // provoque ClassCastException 
     
     
    public Object[] constructTableau(Object anObject) {
       System.out.println(anObject.getClass());
       Object[] unTableauGenerique = new Object[]; // ne marche pas... que mettre a la place ?
       return unTableauGenerique;
    }
    Merci ;o)

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    bonjour,

    regarde du côté de la classe java.lang.reflect.Array, méthode newInstance()

  3. #3
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    justement, là ca me renvoi un objet de type Array, et pas un type primitif "tableau"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.reflect.Array.newInstance(anObject.getClass(), taille); // renvoi un Object
    moi je voudrais récuperer un Object[] mais du type que je souhaite...

  4. #4
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Non, ça te renvoie un objet de type Object[], que tu dois caster au retour. Relis la Javadoc de la méthode pour plus de précisions.

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    En effet, ca fonctionne comme il faut, c'était un p'tit probleme de compilation ;o)

    Merci !

    Pour ceux que ca interesse, le but était de faire une methode générique permettant d'ajouter un element a un tableau [] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        /**
         * Ajoute un element a un tableau statique et renvoi le nouveau tableau
         * @param pAncienTableau le tableau dans lequel il faut ajouter un element
         * @param pNouveauElement l'element a ajouter au tableau
         * @return un tableau contenant tout les elements de l'ancien tableau et le nouvel element
         */
        private Object _ajouteElementATableauStatique(Object[] pAncienTableau, Object pNouveauElement) {
            Object aNouveauTableau = java.lang.reflect.Array.newInstance(pNouveauElement.getClass(), pAncienTableau.length+1);
            System.arraycopy(pAncienTableau,0,aNouveauTableau ,0,pAncienTableau.length);
            java.lang.reflect.Array.set(aNouveauTableau, pAncienTableau.length, pNouveauElement);
            return aNouveauTableau;
        }
    Je sais qu'il y a d'autres methodes passant par ArrayList, mais bon... je suis pas sur que ce soit vraiment plus performant...

    exemple d'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    unObjet : Toto  = new();
    uneListe : Toto[] = new Toto[0]; // tableau de n'importe quelle taille, pas forcement vide.
     
    uneListe = (Toto[])_ajouteElementATableauStatique(uneListe, unObjet);
    uneListe = (Toto[])_ajouteElementATableauStatique(uneListe, unObjet);
    uneListe = (Toto[])_ajouteElementATableauStatique(uneListe, unObjet);
    Je suis d'accord que pour ajouter plusieurs elements c'est pas optimisé, mais dans mon cas, c'est pour ajouter un seul element.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/03/2011, 11h50
  2. Creation de tableau (très simple)
    Par aztec dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/05/2008, 15h07
  3. creation de tableau
    Par tomy7 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/04/2008, 11h09
  4. [DOM] Creation de tableau : souci IE
    Par Arnard dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/04/2007, 09h45
  5. Réponses: 3
    Dernier message: 07/11/2006, 10h33

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