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 :

Methode qui renvoi 2 instances?


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut Methode qui renvoi 2 instances?
    Bonjour à tous, je voudrais créer une méthode qui me renvoi telle ou telle instance comme ça:

    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
    public Class getDriver(String parametre){
     
        Class instance;
     
    if(parametre.equals("A")) {
     
           instance = Instance_A ;
        }
        else if(parametre.equals("B")) {
     
           instance = Instance_B ;
        }
     
     
        return instance;
     
    }

    J'ai voulu renvoyer un objet du type Class mais ça ne marche pas.
    Il y a un moyen de renvoyer directement l'instance?

    Merci à vous

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Ca sert à rien de lui renvoyer un objet de type Class... Par contre, tu peut choisir de lui renvoyer Object, vu que toutes les classes déscendent d'Object ça devrait jouer

    Ou alors une classe ou une interface dont dépendent tous deux instanceA et instanceB

  3. #3
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Oui comme ceci (j'aime pas trop les if à la pelle, je préère le switch donc:


    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 Object getDriver(String parametre){
     
        Object instance = null;
     
        switch (parametre.charAt(0)) {
            case 'A' :
                instance = Instance_A;
                break;
            case 'B' :
                instance = Instance_B;
                break;
            default: break;
        }
        return instance;
     
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    Concernant les switch, on m'a toujours dit que c'etait plus gourmand car il rentrait dans chaque cas, contrairement aux if...mais je n'ai jamais vraiment vérifié

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Ok, mais comment faire pour apeller cette methode et accéder directement aux méthode de l'instance renvoyée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getDriver("A").UneMethode();
    Ca ne marche pas, il faut que je caste l'objet renvoyé?

  6. #6
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sceadu16
    Ok, mais comment faire pour apeller cette methode et accéder directement aux méthode de l'instance renvoyée?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getDriver("A").UneMethode();
    Ca ne marche pas, il faut que je caste l'objet renvoyé?
    Oui.

    Mais si tu as une interface XXX que tes 2 classes implément, tu peut aussi retourner un objet de type XXX et ensuite tu n'as pas besoin de cast.

  7. #7
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Citation Envoyé par qdqdfqfdqdxcwcrzsdfw
    Concernant les switch, on m'a toujours dit que c'etait plus gourmand car il rentrait dans chaque cas, contrairement aux if...mais je n'ai jamais vraiment vérifié
    Je ne pense pas... dans mon souvenir des cours de compilation, à la compilation justement le switch est traduit en if (je ne sais pas si c'est le cas en java), c'est juste pour moi un soucis de lecture.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Mon problème c'est que les 2 classes que je veux renvoyer possèdent les même méthodes (même nom, même nombre de paramètres), comment je peux faire alors en utilisant le principe d'interface pour accéder à l'une ou à l'autre classe?

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Pour la question initiale :
    Tu peux renvoyer une instance d'un objet à partir de la classe, tu as cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Class.forName("nom_complet_de_classe").newInstance();
    Par contre, ça renvoi un "Object" (à caster par l'appelant)...

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

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Pour la question initiale :
    Tu peux renvoyer une instance d'un objet à partir de la classe, tu as cette forme :
    Code :

    Class.forName("nom_complet_de_classe").newInstance();


    Par contre, ça renvoi un "Object" (à caster par l'appelant)...
    Ce code crée une nouvelle instance de la classe non? je voudrais juste récupérer une classe déjà instanciée.
    Je pense qu'avec une interface je pourrais m'en sortir mais je ne vois pas comment l'utiliser dans mon cas

  11. #11
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Class.forName().newInstance() te renvoi bien une instance d'objet de la classe... (a priori, c'est ce que tu voulais non ?)

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

  12. #12
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sceadu16
    Mon problème c'est que les 2 classes que je veux renvoyer possèdent les même méthodes (même nom, même nombre de paramètres), comment je peux faire alors en utilisant le principe d'interface pour accéder à l'une ou à l'autre classe?
    Tout simplement comme ça :

    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
    public interface XXX {
       public void method1();
       public boolean method2();
    }
     
    public class XXXA implements XXX {
       public void method1(){
          //Code
       }
     
       public void method2(){
          //Code
       }
    }
     
    public class XXXB implements XXX {
       public void method1(){
          //Code
       }
     
       public void method2(){
          //Code
       }
    }
    Et ensuite ton code donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public XXX getDriver(String parametre){
        XXX instance = null;
     
        switch (parametre.charAt(0)) {
            case 'A' :
                instance = new XXXA();
                break;
            case 'B' :
                instance = new XXXB();
                break;
            default: break;
        }
        return instance;
    }

  13. #13
    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
    Ben tu fais une interface avec les méthodes communes à tes 2 objets.
    Tu ajoutes le implements pour tes 2 objets.

    Enfin au lieu de renvoyer un object tu renvoies ton interface ...

    [EDIT] grillé ... et puis un exemple c'est tjs mieux ...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Et ensuite ton code donnerait :

    Code :

    public XXX getDriver(String parametre){ XXX instance = null; switch (parametre.charAt(0)) { case 'A' : instance = new XXXA(); break; case 'B' : instance = new XXXB(); break; default: break; } return instance; }

    Ok, je vois mais quand tu fait
    instance = new XXXA();
    Ca crée forcément une nouvelle instance? car ma fonction va être apellée des milliers de fois, je vais créer à chaque fois une nouvelle instance de XXXA?
    Si je fais
    instance = XXXA;
    Ca marche pareil?

  15. #15
    Membre émérite
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Par défaut
    Pour mémoire, tout ceci s'appelle le pattern AbstractFactory.

  16. #16
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par sceadu16
    Ca marche pareil?
    Oui, bien sûr

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 9
    Par défaut
    Pour mémoire, tout ceci s'appelle le pattern AbstractFactory.
    A tes souhaits Thibaut
    C'est bon, ça marche impeccable. j'avais jamais utilisé d'interface et je voyait pas trop comment faire, merci beaucoup vous m'avez été très utiles
    A la prochaine.

Discussions similaires

  1. Réponses: 8
    Dernier message: 05/05/2011, 14h44
  2. Réponses: 3
    Dernier message: 23/09/2009, 10h52
  3. Réponses: 3
    Dernier message: 13/07/2006, 18h56
  4. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 11h07
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 01h13

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