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 :

[Généricité] Utilisation de ClassLoader à la place d'un switch/case


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut [Généricité] Utilisation de ClassLoader à la place d'un switch/case
    je precise je suis en 1.4

    je suppose que la question a déjà été posée mais je ne suis pas fichu de mettre la main sur la réponse.

    Voilà, je fait un petit bout de code dans lequel je souhaite traiter de manière générique trois types d'objets. Ces types d'objets sont similaires et j'appelle exactement les mêmes méthodes avec les mêmes arguments. Les traitements à effectuer sont identiques également.

    J'ai donc commencé naïvement en me disant que j'allais m'en sortir avec un switch case basé sur un paramètre que je passe à ma méthode "générique".
    Mais bon je m'en sors mais c'est ultra moche ...

    je me dis qu'il y a surement un moyen de passer par quelque chose de vraiment générique (enfin qui traite ces 3 éléments de manière transparente)

    Je tente donc avec ClassLoader mais je n'y arrive pas tellement. Si qqun avait une petite piste vers quoi m'orienter pour y arriver.

    Voici en gros le code (il est très moche mais c'est pour que vous compreniez mieux en gros quels sont les points où j'ai besoin de générécité)

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    switch(type){
    			case PROJ:
                                   // listeCodes est une sorte d'Iterator
    				listeCodes = ProjectCode.load(session, new 
    String[]{"CodeValue","Description","CodeTypeName","ParentObjectId"}, ids);
    				
    				// on parcours cette liste de codes
    				if(listeCodes != null && listeCodes.getCount()>0){
    					
    					Object[] values = new Object[4]; //les objets à insérer dans listeValeurs
    					while(listeCodes.hasNext()){
    						ProjectCode code = (ProjectCode) listeCodes.next();
    // récupération des données en param 2 des loadXXX
    					}
    				}
    				break;
    			case ACT://traitement idem sauf type d'objet différent
    				listeCodes = ActivityCode.load(session, new String[]{"CodeValue","Description","CodeTypeName","ParentObjectId"}, ids);
    				// on parcours cette liste de codes
    				if(listeCodes != null && listeCodes.getCount()>0){
    					
    					Object[] values = new Object[4]; //les objets à insérer dans listeValeurs
    					while(listeCodes.hasNext()){
    						ActivityCode code = (ActivityCode) listeCodes.next();
    					}
    				}
    				break;
    			case RES:
    en gros il me faut (mais le code est faux il me semble) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Class maClasse = ClassLoader.loadClass(/* APPEL d'une fonction qui me renvoie le nom de la classe en focntion de "type"*/)
     
    listeCodes = maClasse.load(session ....
    while(
         maClasse code (maClasse) listeCodes.next();
    // suite des traitements identiques
    est ce proche de la réalité ? du réalisable ?

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    C'est presque ca sauf qu'il faut que tu passes par la methode getMethod() de Class pour appeler la méthode load(session,...)

  3. #3
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Si tes classes ont des methodes similaires, ne serait il pas possible que tu fasses une interface qui reprend les methodes communes et tes objets implementent cette interface. Ensuite, tu n'as qu'a travailler sur des objets de ton interface et c'est gagné !

  4. #4
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    En fait ces objets proviennent d'une API sur laquelle je n'ai pas la main ...

    j'aurais dû le préciser ...

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par in
    En fait ces objets proviennent d'une API sur laquelle je n'ai pas la main ...
    2 questions :
    • A quoi correspond le code identique ?
    • Les classes implémentent/héritent-elles d'une interface/classe commune ?
    a++

  6. #6
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    J'ai mis les morceaux identiques pour chaque type en gras dans le premier message. J'espere que c'est assez clair

    Citation Envoyé par adiGuba
    Les classes implémentent/héritent-elles d'une interface/classe commune
    Oui ces classes héritent toutes d'une meme classe. J'avais penser à caster vers le type parent ce parent ne possède pas le méthodes que je souhaite appeler. Je ne crois pas que je puisse passer par ici ...

    En fait tout le code est identique, seul changent les types d'objets sur lesquels appeler les méthodes et le types vers lesquels caster depuis Object...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/03/2008, 11h31
  2. Réponses: 2
    Dernier message: 02/07/2007, 16h19
  3. Réponses: 1
    Dernier message: 15/08/2006, 12h58
  4. Utiliser une image à la place du curseur par défaut
    Par nice dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 11/12/2005, 22h15

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