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 :

Créer un objet dont la classe est une variable


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Par défaut Créer un objet dont la classe est une variable
    Bonjour à tous,
    je cherche la solution à un petit problème, je dois créer des objets dont la classe dépend de l'élément sélectionné dans une liste déroulante, je développe :
    J'ai une liste déroulante qui se remplie en fonction de fichiers ".java" qui se trouvent dans un package "modules". Ces fichiers sont mes classes. Par exemple :
    - ImportStations.java
    - ImportEnquetes.java
    - VérificationDesFiches.Java
    Ma liste déroulante affiche donc :
    - ImportStations
    - ImportEnquetes
    - VérificationDesFiches

    J'ai un bouton qui lance une action par son écouteur dans lequel je dois créer un objet de la classe de l'élément sélectionné dans la liste déroulante, par exemple :
    si j'ai sélectionné ImportStations et que je clique sur le bouton, mon écouteur doit créer un objet :
    ImportStations importStations = new ImportStations();
    Je voudrais le faire sans donner la classe mais en utilisant l'élément sélectionné de la liste un truc du genre (je sais que ce que je vais donner comme exemple est faux c'est juste pour expliquer le principe)
    this.fenetre.getListeActions().getSelectedItem() monObjet= new this.fenetre.getListeActions().getSelectedItem()();

    Quelqu'un a-t-il un piste à me donner ?
    Merci à tous et bonne journée.

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Par défaut
    Merci beaucoup, je vais jeter tout de suite un oeil sur le fonctionnement de ce Class.forName()

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    oui enfin, sauf cas particulier, ça reste moche:

    Ton programme n'auras pas, au final, accès aux .java => comment va-tu scanner? les .class?
    Si tu scanne les .class, tu aura les classes anonyme et les InnerClass qui seront visible => tu ne veux / peux pas les instancier

    Le plus simple reste d'avoir un système relativement propre de configuration. Genre tu fais une Enum avec les valeurs possible, et c'est l'enum qui se charge d'instancier:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public enum Valeurs{
     
    public abstract Object instanciate();
       IMPORT_STATIONS(){
          public Object instanciate(){return new ImportStations();}
       },
       IMPORT_ENQUETE(){
          public Object instanciate(){return new ImportEnquetes();}
       }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((Valeurs)comboBox.getSelectedItem()).instanciate();
    Possible uniquement si tu sais tout ça à la compilation.
    Si ça doit être dynamique, avoir au minimum un fichier de configuration pour définir les valeurs possibles.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Par défaut
    Merci tchize_ pour ton approche, c'est de cette façon que je comptais envisager le truc, le hic, mon boss ne veut pas que les classes apparaissent, il veut que l'outil soit évolutif sans plus jamais mettre les mains dans le code, en gros il veut développer les classes du package module et que le reste se fasse tout seul en fonction de ce qui se trouve dans le package, donc pas de maintenance de fichier config, en fait pas de fichier de config du tout, ordres du chef .

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Tu peux utiliser des libriaries annexe? Parce que, si tu développe ton scanner toi même, tu va en ch*** et ce sera instable, il y a tellement de cas à gérer pour scanner les classes d'un package.
    De plus, comme je l'ai dit, tu va inévitablement te retrouver avec, dans ce module, des classes Machin$1 Machin$2 Machin$Truc que tu n'as probablement pas envie d'exposer . Je dirais que la première chose à exposer à ton boss, ce sont les problèmes que cela va inévitablement entrainer en production, les erreurs, les coûts de maintenance. Parce que si il veux tout automatique, tu aura inévitablement:

    des dev qui vont faire des constructeurs avec arguments
    des dev qui vont faire des inner classes et des anonymous class
    des dev qui iront tapper le truc dans un sous package
    des devs qui laisseront des classes appelées ImportFactureClientMachinQuiFaitChier


    Une solution peut être acceptable pour lui serait d'utiliser les scanner de Spring (soit en utilisant Spring IOC, soit en appelant directement les classes de scanning de spring) pour scanner un package X à la recherche d'annotations bien précise. Je ne connais pas le contexte de cet outils, mais pour un utilisateur final, sans un minimum de collaboration du dev, tu risque d'avoir des trucs "bizarres" à l'écran.

  7. #7
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Et JCL?

    Tu crées un jar et tu le charges.
    Éventuellement, dans le pire des cas, tu fais un appel système pour créer le jar à partir de tes fichiers source ... à tous les problèmes près

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

Discussions similaires

  1. Module dont le nom est une variable
    Par Mr Hyde dans le forum Général Python
    Réponses: 11
    Dernier message: 26/02/2023, 20h39
  2. Réponses: 10
    Dernier message: 02/07/2021, 17h44
  3. Delaration d'un objet dont sa classe implemente une Interface
    Par handsome01 dans le forum Général Java
    Réponses: 2
    Dernier message: 02/11/2012, 03h20
  4. Créer un objet dont le nom est issu d'un String
    Par Claude_Azoulai dans le forum VB.NET
    Réponses: 7
    Dernier message: 05/04/2010, 14h02
  5. Instancier une classe dont le nom est une variable
    Par bendev dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 06h01

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