[java] fonctions et variables

Naya -  
 Naya -
Bonjour,

Voila mon probleme. Je traduit en Java une librairie C++.

J'ai une fonction du type

void maFonction (type1 var1, type2 var2 )

en C++ si je faisai void maFonction (type1 var1, type2 & var2 ) ca me permet de modifier directement var2 et que ca soit effectif dans la fonction qui appel maFonction. en java, je ne vois pas comment faire pour que ca soit pareil.

j'espere etre assez claire, si ce n'est pas le cas n'hesitez pas a me demander ^^

merci d'avance

Naya
Configuration: Linux Red Hat
SeaMonkey 1.0.9

2 réponses

  1. sendoshi Messages postés 22 Statut Membre 70
     
    Ca dépends. Si type2 est un objet, alors le passage se fait directement par référence, en conséquence de quoi une modificatin faite sur var2 affecte directement l'objet original.
    Pas de soucis donc, il suffit de
    void maFonction(type1 var1, type2 var2)

    attention c'est aussi valable pour var1: si c'est un objet, il sera passé doffice par référence, donc si tu veux pouvoir bosser dessus sans le modifier commence ton code par
    type1 tempVar1= var1.clone(); //si tu as overridé la méthode clone
    ou
    type1 tempVar1= new Type1(var1);//si tu as un constructeur de copie

    Voilà, bonne continuation
    2
    1. Naya
       
      c'est ce qu'il me semblait que pour les objets c'etait bon, or j'ai la fonction suivante par exemple

      protected void get_value (String key , String value)
      {
      value = m_values.get(key);
      }

      or String est bien un objet, n'est ce pas ? quand je veux afficher value ca me met null

      (par contre je viens de verifier sur une autre de mes fonction avec des objets que j'ai cree et ca fonctionne comme tu dis)

      je suis perplexe o_O
      0
    2. sendoshi Messages postés 22 Statut Membre 70 > Naya
       
      ce que tu me décrit ressemble à unne Map:
      http://java.sun.com/j2se/1.4.2/docs/api/java/util/Map.html
      0
    3. Naya > sendoshi Messages postés 22 Statut Membre
       
      en effet je cherche dans une map, mais c'est bien la valeur de value que j'avais besoin. mais avec ta methode ca marche. encore merci
      0
    4. Naya
       
      est ce que si la fonction est definie en static ca ne passe plus en reference ?

      pour ma fonction
      static public ers.severity parse (String string, ers.severity s)

      et que je l'appelle

      parse(string, type);

      type est a null apres alors que dans la fonction (en mode debuggeur) le s a bien une valeur...

      quelqu'un voit il ou je me plante ?
      merci
      0
    5. sendoshi Messages postés 22 Statut Membre 70 > Naya
       
      static ne change rien au passage par références, ça change juste le fait que ta méthode devient une méthode de classe au lieu d'être une méthode d'instance. Maintenant, c'est peut être une connerie grosse comme une maison que je vais écrire, mais: est ce que quand tu passes s pour la première fois il ne serait pas null? exemple:

      ers.severity type=null;
      parse (string, type);

      dans ce cas, tu cherche à affecter une valeur à une référence nulle, c'est comme si, en C/C++ tu passais comme paramètre un pointeur initialisé à null: tu affecte une une valeur dans une case mémoire qui n'est connue nulle part. Rapelles toi: en java, tout ce qu'on passe comme paramètre, dès qu'il s'agit d'objets, ce sont des copies des références. Et en utilisant ces références on travaille sur le contenu de l'adresse mémoire référencée. Donc suµi la reférence est nulle, impossible de propager le changement hors de ta méthode.

      Si c'est autre chose qui fait bugger ton code, sans plus de détails, j'ai pas d'idées.
      0
  2. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165
     
    Ben je crois que tu n'a rien à faire.....il me semble que si tu passe une variable à une fonction en java, elle peut etre modifiée et récupérée à l'extérieur de la dite fonction.
    Sinon, si cela ne fonctionne pas, et pour etre plus sur, tu indique à ta fonction qu'elle retourne le type de variable. Ca donnerai ceci...

    type2 maFonction (type1 var1, type2 var2 ){
    //le code de ta fonction
    //et quelque part
    return var2;
    }
    0
    1. Naya
       
      merci pour ta reponse rapide

      et bien je croyais aussi que je n'avais rien a faire car en java tout etait reference, or en fait on m'a explique que de base java passe une copie de la variable dans la fonction.

      pour ce qui est de ta seconde solution elle marche pr le cas que j'ai montré en effet, mais si j'ai

      int maFonction (type1 var1, type2 var2 ) et que je veux toujours modifié var2 ET avoir un int en sortie par exemple ca ne fonctionne (c'est le cas que j'ai en fait, je suis une nouille et j'aurais du le montrer direct :p)
      0
      1. sendoshi Messages postés 22 Statut Membre 70 > Naya
         
        java fait du passage par copie uniquement si tu travaille sur des primitives (int, long etc...) ou si tu travaille sur des immutable (c'est le cas de String et je pense que c'est aussi le cas de Integer, Long etc, à vérifier)
        0
      2. Naya > sendoshi Messages postés 22 Statut Membre
         
        oki tu viens de repondre a une partie de ma question

        et donc si c'est un type String, comment puis je faire pour qu'il soit quand meme modifié ?
        0
      3. sendoshi Messages postés 22 Statut Membre 70 > Naya
         
        tu peux passer par un StringBuffer ou un StringBuilder qui ont la même fonction mais sont mutables, l'appel de ta méthode maFonction devrait alors être
        StringBuffer mySB= new StringBuffer(myString);
        int resultat= maFonction(var1, mySB);
        myString= mySB.toString();

        je sais, c'est vachement bricolage...

        mais je vois pas trop comment faire d'autre. Ca peut aussi marcher avec un stringBuilder, ou un char[].
        Avec un String[] aussi.

        Maintenant, si la String est une variable d'instance, rien ne t'empèche de passer this en paramètre de ta méthode et de modifier directement la string via son setter
        0
      4. Naya > sendoshi Messages postés 22 Statut Membre
         
        super !!
        ca marche nickel

        merci beaucoup pour toutes les explications :)

        bonne journee

        Naya
        0