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

Langage Java Discussion :

Introspection de tableaux : comment faire ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut Introspection de tableaux : comment faire ?
    Salut,

    Je cherche à introspecter des objets, et notament faire un traitement particulier dans le cas ou mon objet est un tableau.

    Je peux savoir si c'est un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet.getClass().isArray()
    Je peux connaître le type des éléments du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monObjet.getClass().getComponentType()
    Mais comment récupérer les données de ce tableau, et en particulier la taille et ses éléments. J'ai essayé de caster mon objet en Object[], mais ça ne marche pas dans mon exemple ou c'est un double[].

    Une idée ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    Bonjour,

    Si ton objet (monObjet) est un Array tu peux déterminer sa taille avec : monObjet.size() qui te renvoit un entier ou null sinon.

    Ensuite si tu connait le type des éléments de ce tableau .. tu y accède tout simplement par monObjet[0], monObjet[1], ....

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Salut,

    getComponentType ne renvoie que des Class or tu lui donnes un tableau composé de type primitifs(double). C'est peut être de là que vient ton problème.
    Essaie de te renseigner sur la gestion des types primitifs, je pense qu'il ne le gère pas de la même façon.

    ++

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


    lucimed : ceci n'est pas de l'introspection puisque tu manipules directement le tableau
    De plus comme l'a dit bobuse les tableau de type primitive ne sont pas castable en Object[]...

    bobuse : En plus des méthodes que tu cites de Class, tu peux utiliser la classe java.lang.reflect.Array qui comporte tout ce qu'il faut pour manipuler un tableau par l'introspection (getLength() pour la taille, newInstance() pour en créer un tableau, get() et set() pour accéder/modifier les éléments + tous les get/set spécialisé par type primitif).

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	Object array = new double[]{ 1.0, 2.0, 3.0 };
     
    	// Si c'est un tableau :
    	if (array.getClass().isArray()) {
    		// On récupère sa taille :
    		final int length = Array.getLength(array);
    		for (int i=0; i<length; i++) {
    			// Et on récupère l'élement selon son index :
    			Object o = Array.get(array, i);
    			System.out.println("Valeur = " + o + " / Type = " + o.getClass());
    		}
    	}
    Bien entendu si tu utilises get() avec un type primitif tu obtiendras le type wrapper correspondant. Dans ce cas précis tu obtiens le résultat suivant :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Valeur = 1.0 / Type = class java.lang.Double
    Valeur = 2.0 / Type = class java.lang.Double
    Valeur = 3.0 / Type = class java.lang.Double

    a++

  5. #5
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut
    Trop fort Adiguba

    En fait, j'ai pas pensé à regarder les méthodes statiques de Array

    Je teste ça

  6. #6
    Membre expérimenté
    Avatar de bobuse
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 232
    Par défaut
    Impeccable :-)

    Merci

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/08/2006, 15h16
  2. Réponses: 6
    Dernier message: 20/05/2006, 10h42
  3. Réponses: 7
    Dernier message: 24/03/2006, 10h51
  4. [Tableaux] comment faire un moteur de recherche en php
    Par lindouchine dans le forum Langage
    Réponses: 4
    Dernier message: 23/03/2006, 23h14
  5. Réponses: 11
    Dernier message: 18/02/2006, 19h39

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