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 :

[Debutant(e)][Conception] Fonction avec type de paramètre variable


Sujet :

Java

  1. #1
    Membre régulier Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Points : 78
    Points
    78
    Par défaut [Debutant(e)][Conception] Fonction avec type de paramètre variable
    Bonjour,

    je voudrais savoir s'il est possible de faire une fonction que l'on puisse appeler avec un paramètre de type quelconque et qui selon le type de cet attribut appelle une fonction précise?
    Exemple :
    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 void executeSelonType(??? tmpSansType)
    {
      if (isInt(tmpSansType)) intFunction();
      else if (isDouble(tmpSansType)) doubleFunction();
      else if (isString(tmpSansType)) stringFunction();
    }
    public void main()
    {
     int tmpInt = 9; 
     double tmpDouble = 9.9 ;
     String tmpString = "coucou";
     
     executeSelonType(tmpInt);
     executeSelonType(tmpDouble);
     executeSelonType(tmpString);
    }
    Merci du coup de main


    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java
    "On ne va jamais aussi loin que lorsqu’on ne sait pas où l’on va." - Christophe Colomb

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Tes ??? est Objet.
    Apres il faut tester avec des getClass() ou instanceof

    Mais il existe le polymorphisme aussi : tu a le droit de declarer
    public void NameOfTheMethode(int i)
    public void NameOfTheMethode(double i)
    public void NameOfTheMethode(String i)
    public void NameOfTheMethode(YourObject i)

    Le compilateur choisira la bonne methode si l'attribut est evident.

    Des liens :
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#getClass()
    http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html

  3. #3
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Ou alors tu définis 1 fonction par type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void executeSelonType(int tmpAvecType)
    {
      intFunction();
    }
    public void executeSelonType(double tmpAvecType)
    {
      doubleFunction();
    }
    public void executeSelonType(String tmpAvecType)
    {
      stringFunction();
    }
    [Edit]En gros c'est ce qu'a dit TabrisLeFol, mais il est plus rapide et je n'avais pas tout lu ![/Edit]

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par TabrisLeFol
    Mais il existe le polymorphisme aussi : tu a le droit de declarer
    public void NameOfTheMethode(int i)
    public void NameOfTheMethode(double i)
    public void NameOfTheMethode(String i)
    public void NameOfTheMethode(YourObject i)
    Juste une précision, ce n'est pas du polymorphisme, c'est de la surcharge.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Je suis pas bon en francais...
    Oui,
    Le polymorphisme est la capacité, pour un même message de correspondre à plusieurs formes de traitements selon l'objet auquel ce message est adressé. La gestion du polymorphisme est assurée par la machine virtuelle dynamiquement à l'exécution.
    C'est l'inverse... Moi j'ai tendance a l'utiliser pour les deux sens..

  6. #6
    Membre régulier Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Points : 78
    Points
    78
    Par défaut
    MERCI pour vos réponses aussi rapide!!!
    en fait je ne voulais pas me taper à la main la surcharge...

    Quand je fais une classe j'aime laisser de la liberté au codeur à travers les méthodes. J'ai donc définit des methodes de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    setFormat(int formatInt)
    setFormat(double formatDouble)
    setFormat(String formatString)
    L'utilisateur peux donc utiliser ici ce qu'il veut sans "se préoccuper"(oui... tous les types ne sont pas supportés non plus ) du type.

    Donc j'ai une autre fonction qui est de type :
    formatText(int format)
    {
    setFormat(int format);
    .....
    }
    dans ce cas il faut que je redéfinisse une surcharge de la fonction formatText()... et là je trouve que c'est trop long... et que ce n'est pas porfessionnel.

    Donc j'ai essayé
    format instanceof Object...

    mais il y a un problème pour le "int" qui n'est pas un objet. Il y a quelqu'un qui sait comment je peux faire?

    MERCI
    "On ne va jamais aussi loin que lorsqu’on ne sait pas où l’on va." - Christophe Colomb

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    A mon avis tu ne vas pas y couper.. tu as commencé par de la surcharge, il faut aller au bout Mis à part le temps que ça prend pour coder toutes les méthodes, je ne vois pas en quoi ce n'est pas professionnel...

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    int.class ?
    Peut etre qu'il faut passer par Integer...
    jdk 5.0 -> autoBoxing et unboxing

  9. #9
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Plutôt que d'utiliser les types primitifs, utilise les classes wrappers Integer, Double, etc.

  10. #10
    Membre régulier Avatar de rabobsky
    Inscrit en
    Novembre 2003
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 123
    Points : 78
    Points
    78
    Par défaut
    Merci encore une fois pour les réponses!!!
    Apparemment je n'avais pas assez fait attention à ce qu`à dit herve91 :

    Citation Envoyé par herve91
    Citation Envoyé par TabrisLeFol
    Mais il existe le polymorphisme aussi : tu a le droit de declarer
    public void NameOfTheMethode(int i)
    public void NameOfTheMethode(double i)
    public void NameOfTheMethode(String i)
    public void NameOfTheMethode(YourObject i)
    Juste une précision, ce n'est pas du polymorphisme, c'est de la surcharge.
    c'est ce que j'ai fait (créer une méthode propre pour le int et les autres sont tous des objets donc il n'y a plus de prob (pour l'instant).

    Merci à TOUS!!!

    PS : Pour ce qui est de faire int.class je n'ai pas trouvé comment obtenir appeler mes autres classes : meme si je sais que c'est un entier je ne peux pas récupérer la valeur ou bien la transformer.
    "On ne va jamais aussi loin que lorsqu’on ne sait pas où l’on va." - Christophe Colomb

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

Discussions similaires

  1. Fonction avec type de paramètre variable
    Par zentaf dans le forum C
    Réponses: 7
    Dernier message: 15/01/2013, 17h32
  2. [debutant] Appel de fonction avec parametre undefined
    Par Jean_pierre dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/03/2009, 21h38
  3. Question sur les fonctions avec "TABLE" comme param. de retour
    Par Alex01 dans le forum Développement
    Réponses: 2
    Dernier message: 17/11/2008, 09h26
  4. Réponses: 9
    Dernier message: 30/03/2006, 16h44
  5. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45

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