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 :

Appeler une méthode en spécifiant le nom des arguments


Sujet :

avec Java

  1. #1
    Membre chevronné

    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Septembre 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2007
    Messages : 214
    Par défaut Appeler une méthode en spécifiant le nom des arguments
    Bonjour
    Est-il possible en Java d'appeler une méthode en spécifiant le nom de ses arguments ? Par exemple, j'ai une classe avec constructeur :
    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
    public class Monstre{
    	private int niveau, PV, degats, armure, touche;
    	private float vitesse;
    	private String etat;
     
    	public Monstre(int niveau, int PV, int degats, int armure, int touche, float vitesse){
    		this.niveau = niveau;
    		this.PV = PV;
    		this.degats = degats;
    		this.armure = armure;
    		this.touche = touche;
    		this.vitesse = vitesse;
    		this.etat = this.mort()?"Mort":"Vivant";
    	}
    }
    Je voudrais dans le programme principal faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Monstre toto=new Monstre(niveau=2,PV=4,degats=1,armure=3,touche=10,vitesse=2.5)
    Tel quel, mon code programme principal ne marche pas. Mais y a-t-il une autre possibilité pour faire quelque chose de semblable ?

    Merci
    Christophe

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    bonjour,

    c'était presque ça.

    remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Monstre toto=new Monstre(niveau=2,PV=4,degats=1,armure=3,touche=10,vitesse=2.5)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Monstre toto=new Monstre(2,4,1,3,10,2.5);

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 245
    Par défaut
    En VB par exemple on aurait écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Monstre toto=new Monstre(niveau:=2,PV:=4,degats:=1,armure:=3,touche:=10,vitesse:=2.5)
    C'est peut être pareil en Java.

    A moins que Java ne supporte pas les arguments nommés.


    ludomacho> Tu n'as pas bien lu la question.

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    bonjour

    effectivement......

    désolé

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Java ne connaît pas les arguments nommés.
    Ce genre de choses est impossible avec les constructeurs et tout ce qui a pour but de créer l'objet qui va contenir ces paramètres.

    Le reste du temps, la méthode Java consiste à rassembler ces paramètres dans une classe, et à passer une instance de cette classe en paramètre, au lieu de 15 paramètres.

    Dans certains cas, il peut être plus simple de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Monstre toto=new Monstre();
    toto.setNiveau(2);
    toto.setPv(4);
    toto.setDegats(1);
    toto.setArmure(3);
    toto.setTouche(10);
    toto.setVitesse(2.5);
    Bien sûr, cela signifie que le compilateur ne peut pas vérifier si on en a oublié un. Dans ce cas-là, l'attribut oublié aura la valeur par défaut.

    ... À noter que dans le cas présent, on parle quand même de données de programme codées en dur. Normalement un RPG garde sa base de données dans un système plus facile à lire et maintenir, qui inclut un mécanisme de vérification de la validité de ces données. Ce qui ne fait pas partie de mécanismes du langage et nécessite donc un travail supplémentaire de toute façon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjoru à tous.

    Tu peux passer par une classe de constructeur pour garantir la construction.

    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
    class ConstructeurDeMonstre {
    	private int niveau, vie, degats, armure, touche;
    	private float vitesse;
     
    	public ConstructeurDeMonstre niveau(int n){niveau = v; return this;}
    	public ConstructeurDeMonstre pv(int pv) {vie = v; return this;}
    	public ConstructeurDeMonstre degats(int d) {degats = v; return this;}
    	public ConstructeurDeMonstre armure(int a) {armure = a; return this;}
    	public ConstructeurDeMonstre touche(int t) {touche = t; return this;}
    	public ConstructeurDeMonstre vitesse(float v){vitesse=v; return this;}
    	public Monstre monstre() {
    		return new Monstre(niveau, vie, degats, armure, touche, vitesse);
    	}
     
    	static int main(String[] args) {
    		Monstre m = new ConstructeurDeMonstre()
    			.niveau(2)
    			.pv(4)
    			.degats(1)
    			.armure(3)
    			.touche(10)
    			.vitesse(2.5)
    			.monstre();
     
    		Monstre autre = new ConstructeurDeMonstre().niveau(2).pv(4).monstre();
    	}
    }
    EDIT: merci wax78 pour la correction

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    leternel, tes méthode renvoie un void donc tu ne pourras pas enchainer les appel de méthode ainsi.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

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

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    oups, pardon… j'édite le message

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 095
    Par défaut
    Aucuns souci
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

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

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 577
    Par défaut
    Ce ConstructeurDeMonstre est une syntaxe un peu plus compacte que juste les setters.
    Mais il a un défaut commun : le compilateur ne peut pas vérifier si on donne bien une valeur à tous les paramètres.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    le compilateur, non, mais le code de ConstructeurDeMonstre peut s'en charger, dans la fonction monstre()

    Et surtout, il permet de ne pas avoir de setters bruts dans Monstre!
    On a donc une possibilité d'améliorer l'encapsulation dans Monstre

Discussions similaires

  1. Comment appeler une méthode dont le nom est dans un string?
    Par Ireon dans le forum API standards et tierces
    Réponses: 22
    Dernier message: 13/04/2007, 17h22
  2. Appel d'une méthode à partir d'un nom de méthode
    Par tnarol dans le forum Langage
    Réponses: 20
    Dernier message: 07/03/2007, 17h46
  3. Réponses: 3
    Dernier message: 05/10/2006, 18h52
  4. Appel d'une méthode d'après son nom
    Par RemiRoques dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 19/06/2006, 13h14
  5. appeller une méthode dans le nom est dans un String
    Par fxjtarga dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2006, 16h06

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