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 :

[Reflection] caster un tableau dynamiquement


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut [Reflection] caster un tableau dynamiquement
    Bonjour,

    Je suis face à un probleme de cast. Je dois faire un client générique permettant de créer dynamiquement des objets. Pour cela, je passe par la reflexivité de JAVA.

    Mais je suis face à un probleme de tableau... Je m'explique :
    Imaginons une classe Polygon, avec une méthode setPoints(Point[] points)

    Si je veux, de manière générique, construire le tableau de Point, il me faut connaitre son type (Point). Et ca je ne le sais pas.

    La seule chose que je peux faire c'est lui passer un tableau Object[] mais lorsque j'appelle la méthode récursive invoke, une exception est levée car la méthode attend un paramètre de type Point[] et non Object[]...

    Donc ma question est la suivante, savez vous comment créer dynamiquement un tableau typé ?

    Merci

  2. #2
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 878
    Par défaut
    Je ne comprend pas bien ton problème..

    Tu as un tableau d'Objet, qui sont en fait des Point ?

    Il existe un moyen de tester la classe d'un objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if( tab[i] instanceof Point ) {
      // appel à setPoint()
    }
    Mais je ne sais pas si c'est ce que tu recherches, il y a aussi la methode getClass().

    Mais j'ai l'impression ( peut-être fausse ) que si tu as ce genre de problème, c'est que tu as peut-être mal conçu quelque chose, sans vouloir te critiquer..

    K

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 24
    Par défaut Re: [reflect] caster un tableau dynamiquement
    Citation Envoyé par Pignoufy
    Si je veux, de manière générique, construire le tableau de Point, il me faut connaitre son type (Point). Et ca je ne le sais pas.
    Je comprend pas cette phrase. Au moment ou tu les rentre dans le tableau, tu ne sais pas encore si ce sont des points ?


    Et ta class Point, c'est une classe à toi ou la classe Pint par défaut de Java ??

  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 Re: [reflect] caster un tableau dynamiquement
    Citation Envoyé par Pignoufy
    Donc ma question est la suivante, savez vous comment créer dynamiquement un tableau typé ?
    Merci
    Bonjour,

    oui ça existe, regarde les méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.Array.newInstance(Class componentType, int[] dimensions)
    java.lang.Array.newInstance(Class componentType, int length)

  5. #5
    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 Re: [reflect] caster un tableau dynamiquement
    Citation Envoyé par Pignoufy
    Donc ma question est la suivante, savez vous comment créer dynamiquement un tableau typé ?
    Merci
    Bonjour,

    oui ça existe, regarde les méthodes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java.lang.reflect.Array.newInstance(Class componentType, int[] dimensions)
    java.lang.reflect.Array.newInstance(Class componentType, int length)

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Il est vrai que je n'ai pas été très clair. J'aurais du commencer par là : voila le bout de code qui marche...

    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
     
    // La methode setPoint(Point[] points)...
    Method currentMethod = pClass.getMethod(methodName, paramClass);
     
    // Le paramètre de la méthode
    Object[] paramsValue = new Object[1];
     
    if (paramClass.equals(Point[].class)) {
    	Object[] tab = new Point[compTab.size()];
    	for (int k = 0; k < compTab.size(); k++) {
    		tab[k] = compTab.get(k);
    	}
    	paramsValue[0] = tab;
    }
     
    currentMethod.invoke(obj, paramsValue);
    Mais je ne suis pas du tout générique puisque je devrais me taper toutes les classes possibles (autres que Point, et j'ai en 40...)

    Je souhaiterais donc ne pas avoir à préciser le type Point...

  7. #7
    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
    Tu as essayé comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Object[] tab = (Object[]) java.lang.reflect.Array.newInstance(Point.class, compTab.size());
       for (int k = 0; k < compTab.size(); k++) { 
          tab[k] = compTab.get(k); 
       }

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Par défaut
    Salut herve91,

    J'étais justement en train d'essayer la classe java.lang.reflect.Array.
    C'est exactement ce que je voulais, je n'ai plus le probleme d'exception.

    merci pour l'info.

  9. #9
    Membre éclairé Avatar de coach759
    Profil pro
    Webmaster
    Inscrit en
    Août 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Août 2009
    Messages : 79
    Par défaut
    Génial!!! merci herve91, je cherchais la solution depuis ce matin... Mon clavier commencer à prendre cher....

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. [Reflection] Créer un tableau d'objets dynamiquement.
    Par salome dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 25/03/2005, 18h59
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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