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

Java Discussion :

Variable utilisée pour instancier un objet


Sujet :

Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 12
    Points
    12
    Par défaut Variable utilisée pour instancier un objet
    Bonjour,

    Voilà ma question est un peu compliquée à poser et par conséquent à trouver la réponse sur le net n'est pas facile. Aussi, vais-je essayer d'être aussi clair que possible.

    Je voudrais pouvoir parser un fichier xml et instancier des objets du type de ce que je trouve dans mon xml, un exemple sera plus parlant:

    Par exemple un fichier xml comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <liste_classes>
      <classe>Classe1</classe>
      <classe>Classe2</classe>
      <classe>Classe3</classe>
      etc...
    </liste_classes>
    et des classes correspondantes Classe1.class, Classe2.class, etc...

    Maintenant dans mon programme, je voudrais pouvoir pour chaque occurence instancier un objet de la classe récupérée du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    x = getElementByTagName();  // comprenez ce qu'il y a entre les balises <classe> et </classe>
    for (int i = 0; i < nbNoeud; i++) 
    {
       x objet_instancie = new x();  //où x deviendrait soit Classe1, Classe2 etc...
    }
    De manière plus générale le XML n'a aucune influence la dedans ça pourrait également être le résultat d'une variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String x = "Classe1";
    x objet_instancie = new x(); // avec x qui deviendrait Classe1 donc :
    // Classe1 objet_instancie = new Classe1();
    Pardonnez-moi le caractère un peu bizarre de ma question et n'hésitez pas à me demander si quelque chose n'est pas clair.

    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    A moins que tu ne veuilles réellement le faire a la main, tu pourrais utiliser un deserialisateur de xml qui ferait tout automatique comme par exemple XStream.

    Sinon pour a la main, tu devrais jeter un œil sur l'introspection : http://ricky81.developpez.com/tutori...pi/reflection/ a mon avis tu devrais y arriver facilement en utilisant cela, du moins si j'ai bien compris la question .
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Je te rassure c'est clair.

    Ce que tu veux faire s'appelle de l'introspection. Il y a un tutoriel complet ici : http://ricky81.developpez.com/tutori...pi/reflection/

    Pour ton exemple particulier, il te faudrait faire:
    Class.forName(x).newInstance();

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Merci, ça m'a l'air d'être exactement ce dont j'avais besoin.
    Réponse claire et super rapide, merci beaucoup !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    Ok,

    j'ai compris les grandes lignes, toutefois après quelques essais, j'en arrive maintenant à un souci d'utilisation des méthodes de la classe ainsi générée. En effet, les objets que je veux instancier de cette façon sont des threads et il n'a pas l'air d'être possible de lancer la méthode start() (uniquement run()), ce qui ne me génère jamais un nouveau thread

    Que faire ? Merci

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new Thread(monObjet).start();

  7. #7
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Quoique après réflexion, je ne vois pas pourquoi tu ne pourrais pas démarrer la méthode start d'un objet Thread créé par Introspection.

    Ton objet est il de type "Thread" ou seulement "Runable"?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 16
    Points : 12
    Points
    12
    Par défaut
    C'est tout bon j'ai trouvé en fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Class c = Class.forName("Classe1");
    Method m = c.getMethod("start");
    et après avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m.invoke(c.newInstance());

    Merci pour la rapidité des réponses, impressionant

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

Discussions similaires

  1. Comment utiliser une variable pour appeler un objet ?
    Par kikou63 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/10/2010, 17h54
  2. Réponses: 2
    Dernier message: 23/04/2010, 01h16
  3. [TSQL] variable à utiliser pour une liste de paramètre
    Par pemathez dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 28/03/2008, 09h34
  4. Réponses: 7
    Dernier message: 18/07/2006, 12h23
  5. utiliser un script pour inserer des objets 3D
    Par s_mihai dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/08/2005, 13h52

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