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

avec Java Discussion :

Récupéré une valeur à partir d'un tableau d'Object


Sujet :

avec Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut Récupéré une valeur à partir d'un tableau d'Object
    Bonjour,

    Je souhaiterai récupéré à partir d'un tableau d'Object la valeur d'une variable ou bien une méthode.

    Voici un exemple de ce que je voudrai faire :

    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
     
    public class MaClass{
    private int val;
     
     
    public MaClass(){
      this.val = 5;
    }
     
    public void setVal(int val){
       this.val = val;
    }
     
    public int getVal(){
     return this.val;
    }
    }
    Dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    public class App 
    {
        public static void main( String[] args )
        {
              Object[] tab = new Object[2];
              tab[0] = new MaClass();
     
             System.out.println("Afficher la valeur : " + tab[0].getVal());//L'erreur ce trouve ici 
        }
    }
    Le message d'erreur me dit : cannot find symbol
    symbol: method getVal()
    location: class java.lang.Object


    Voilà ce que je souhaiterai faire et donc cela me permettrai dans ce tableau de mettre n'importe quel objet mais cela ne marche pas.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Lorsque que tu fais tab[0].getVal(), pour le compilateur, tab[0] est du type Object, puisque le tableau a été déclaré Object[].

    Déclare ton tableau comme ça : MaClass[] tab = new MacClass[2];.

    Dans certains cas, si on a besoin de stocker des objets de différentes classes, on pourrait avoir besoin de typer le tableau avec un type parent, et dans le cas général, le type Objet, parent de tous les autres. Dans ce cas, on peut quand même appeler la méthode en castant, pour indiquer au compilateur par quelle classe on veut manipuler l'objet en faisant ((MyClass)tab[0]).getVal(). Evidemment, il faut s'assurer, par instanceof par exemple, que ça soit bien le type de l'objet sinon on aura une exception à l'exécution. Il vaut mieux éviter ça quand c'est possible : en général, avec une bonne modélisation, on devrait toujours avoir une classe parente commune qui a la méthode, ou une interface.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    Désolé de n'avoir pas répondu plus tôt. Merci pour ta réponse.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 447
    Par défaut
    On peut faire comme ça pour utiliser un tableau d'objet ou un ArrayList d'objet :

    - Tableau d'objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    //Déclaration d'un tableau d'objet de 2 cases par exemple.
            Object[] tab = new Object[2]; 
     
    //Instanciation d'un objet de type Game. On met sa référence dans le tableau
    //d'objet à l'indice 0;
            tab[0]=new Game(); 
     
    //On utilise la méthode displayGame() de l'objet Game depuis l'indice 0 du tableau
    //d'objet. On caste impérativement tab[0] en Game sinon le compilateur ira
    //chercher la méthode displayGame() dans la class Object et donc ne la trouvera
    //pas et fera une erreur de compilation . 
            System.out.println("Afficher la valeur : " + ((Game)tab[0]).displayGame());
    Pour ArrayList<Object> :

    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
     
            //On crée un ArrayList d'objets.
            ArrayList<Object> array = new ArrayList<Object>();
     
    //On instancie l'objet de type Game et on place la référence de l'objet dans l'arrayList
    //nommé array.
            array.add(new Game()); 
     
    //On récupère la référence qui est dans l'arrayList à l'emplacement 0. On caste
    //impérativement la référence dans le type Game sinon le compilateur ira chercher une 
    //référence de type Object ce qui fera une erreur de compilation comme en haut car
    //quand on utilisera la méthode displayGame il ira la chercher dans la classe objet 
    //et bien sûr elle n'existera pas. 
            Game g = (Game)(array.get(0)); 
     
     
            System.out.println("Afficher la valeur : " + g.displayGame());
    Voilà voilà si sa peut aider certains.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. [SimpleXML] [XPATH] recherche d'une valeur à partir d'un tableau
    Par Electr0 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 13/08/2010, 18h37
  3. Réponses: 9
    Dernier message: 12/01/2010, 17h08
  4. dessiner une courbe à partir d'un tableau de valeur
    Par bob75018 dans le forum C++Builder
    Réponses: 8
    Dernier message: 15/06/2007, 04h29
  5. Réponses: 8
    Dernier message: 21/04/2006, 18h18

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