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 :

Invoquer des getter de façon dynamique


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Par défaut Invoquer des getter de façon dynamique
    Bonsoir la team,

    je ne sais pas si c'est possible alors après quelques recherches infructueuses, je sollicite votre aide.

    J'ai plusieurs classes dans mon application Java JEE, qui elle-même possèdent plusieurs méthodes.
    Je souhaiterais appeler une méthode d'une classe donnée de façon dynamique. Est-possible?

    Je vous soumet un exemple avec ce que j'ai pu trouver.

    J'ai une classe qui s'apelle "maClasse". Et à l'intérieur de cette classe une méthode s'appellant "getAttribut".

    Pour effectuer cela, est ce possible de faire ceci :

    1) Initialiser ma classe dynamique.
    2) Initialiser la méthode dynamique de ma classe.
    3) Appeler cette méthode dynamique pour récupérer le résultat.

    Code Java::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class maClasse
    {
        String attribut;
     
        public String getAttribut() {
            return attribut;
        }
     
        //Note: les autres fonctions, comme le setter ne sont pas représentées.
    }
    Mes recherches ont donnée ceci:

    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
    public class classeDeTest
    {
       // constructeur de classe
        public classeDeTest () {
     
                // 1) Initialiser ma classe dynamique.
              Class c = Class.forName("maClasse");
     
              // 2) Initialiser la méthode dynamique de ma classe.
              Method m = c.getMethod("getAttribut");
     
              // 3) Appeler cette méthode dynamique pour récupérer le résultat.
              Object monResultat =  m.invoke(c.newInstance(), null);
        }
     
    }
    Qu'en pensez-vous?

    Berni.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par bernidupont Voir le message
    Qu'en pensez-vous?
    Que c'est exactement ça.

    Évidemment, créer une nouvelle instance d'un objet juste pour appeler une méthode sans paramètre de cet objet tout de suite après, et ne rien en faire d'autre...
    Dis comme ça ça a pas l'air flamboyant d'intérêt. Une méthode statique serait plus attirante.

    Mais pour le cas général, ouais, c'est ça.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Par défaut
    une méthode statique c'est à dire?

    Je vous explique pourquoi je veux faire cela.
    J'ai un grand nombre d'élément contenu dans un message XML que je dois sauver en base. Il faut donc que je récupère leur valeur via leur getter.
    Du coup, si je peux factoriser le code, et utiliser une fonction comme cela, c'est beaucoup plus rapide.

    Qu'en pensez-vous?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par bernidupont Voir le message
    Qu'en pensez-vous?
    Que dans ce cas-là tu ne feras pas newInstance()

    Et puis, on peut se demander pourquoi des éléments XML ne sont pas tous de la même classe, permettant donc d'appeler toujours la même chose pour obtenir leurs attributs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 200
    Par défaut
    - Je suis d'accord avec toi.
    Il faudrait que j'utilise la méthode dynamique généré sur l'instance de mon message XML.

    J'essayé de remplacer "new instance" par l'instance de mon message XML, mais j'obtiens l'erreur:
    "xmlModel.maClasse cannot be cast to org.omg.CORBA.Object".

    Est-ce possible ?


    - Les éléments XML ne sont pas dans la même classe car il y a des balises imbriquées.

    Ex:

    <balise1>
    <champs1> ...<champs1>
    <champs2> ...<champs2>
    ...
    <balise1>
    <balise2>
    <champs1> ...<champs1>
    <champs2> ...<champs2>
    ...
    <balise2>
    ...

    Du coup, l'application sur laquelle je travaille génère automatiquement les classes suivant chaque niveau:
    1- le niveau général permettant d'accéder à chaque balise;
    2 -le niveau en dessous permettant d'accéder au champs des balises.

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Tu peux poster le code que tu utilises ?

    Un exemple qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
          try
          {
             JPanel pan = new JPanel();
             Method m = pan.getClass().getMethod("toString");
             Object monResultat = m.invoke(pan);
             System.out.println(monResultat.toString());
          }
          catch (Exception ex)
          {
             ex.printStackTrace();
          }

Discussions similaires

  1. [XL-2007] Comment reformater des libellés de façon dynamique ?
    Par leinadjan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2013, 21h24
  2. Positionner des objets sur une image de façon dynamique
    Par derfez dans le forum Silverlight
    Réponses: 4
    Dernier message: 14/11/2011, 09h44
  3. Gestion des news de façon dynamique.
    Par Diyos dans le forum Langage
    Réponses: 2
    Dernier message: 25/05/2009, 19h25
  4. transférer des fichiers dans un autre dossier de façon dynamique
    Par soria_t dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/08/2008, 16h28
  5. [AJAX] affichage des données d'une façon dynamique
    Par copertino dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/03/2007, 22h19

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