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 :

Gérer le type d'une instance dynamiquement


Sujet :

avec Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut Gérer le type d'une instance dynamiquement
    Bonjours !!

    Voilà je vaudrais créer une instance d'une classe différente en fonction de paramètre.
    J'ai une solution simple qui consiste à faire des testes conditionnels pour appeler la classe nécessaire, mais je voudrait le faire dynamiquement.
    J'aurais juste un tableaux avec les correspondance entre la condition et la classe, puis boucler sur ce tableaux pour invoquer ma classe.

    Est-ce possible?

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    C'est tout à fait possible à la sortie d'une méthode (mais pas d'un constructeur).
    Il suffit juste de mettre en retour une type générique englobant la plupart des classes qui peuvent être possible en retour de la fonction, du moins la classe Object.
    Pour ce qui est des tableaux pour les test conditionnel, je te conseille plutôt d'utiliser des dictionnaires qui est plus pratique pour ce genre de chose (java.util.Hashmap, java.util.HashTable)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Grand merci pour t'as réponse, mais tu ma pas dit comment faire

    En faite
    La classe java.lang.Class déclare les deux méthodes forName () et newInstance (), qui permettent de récupérer une instance de Class à partir du nom complet d'une classe (package + nom de la classe) et de l'instancier si cette classe a un constructeur sans paramètre.
    Pour le hashMap tu as carrément raison , mais vais finalement faire autrement!!

    Voilà un bout de code en démo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try {
                    try {
                        IDSelf.mainFrame.addUniquePanel((JComponent) Class.forName("view.clients.AddClientsPanel").newInstance ());
                    } catch (InstantiationException ex) {
                        //Logger.getLogger(AddClientsControlleur.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        //Logger.getLogger(AddClientsControlleur.class.getName()).log(Level.SEVERE, null, ex);
                    }
                } catch (ClassNotFoundException ex) {
                    //Logger.getLogger(AddClientsControlleur.class.getName()).log(Level.SEVERE, null, ex);
                }

  4. #4
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    Si tu connais le nom de la classe ainsi que le type des parametres tu peu utiliser la méthode suivant de l'objet Class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public Constructor<T> getConstructor(Class<?>... parameterTypes)
    Une fois l'objet Constructor, il te suffit d'appeler la méthode suivante (en passant les paramétres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public T newInstance(Object ... initargs)
    JBusyComponent, une API pour rendre occupé un composant swing.
    SCJP Java 6.0 (90% pass score)

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    typiquement, ce genre de travaille est le boulot d'une pattern factory. Tu as une factory à laquelle tu dit "je veux une classe de telle type" et elle te la retourne.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    Merci pour vos réponse !!

    divxdede , en faite mes constructeur n'accepte jamais aucun arguments, donc ca me sert pas. Mais peux tjrs servir .

    tchize_ , En faite j'ai fait une classe utilisant le modèle de fabrique sans m'en rendre compte . Mais comme elle n'as qu'une méthode statique , je vais l'intégrer dans une classe "utils".....

    bye

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

Discussions similaires

  1. [OCL] récupérer le type d'une instance en OCL
    Par sarahAyad dans le forum UML
    Réponses: 1
    Dernier message: 20/11/2011, 17h34
  2. Redimentionner une instance dynamique d'une classe
    Par reveilla dans le forum Débuter
    Réponses: 6
    Dernier message: 19/09/2009, 17h11
  3. Réponses: 8
    Dernier message: 08/10/2008, 10h58
  4. Créer une instance dynamiquement
    Par stephane_78 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 13/12/2007, 09h26
  5. Réponses: 2
    Dernier message: 19/10/2006, 15h29

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