[java] fonctions et variables
Naya
-
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
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
A voir également:
- [java] fonctions et variables
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Fonction si et - Guide
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
2 réponses
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
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
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;
}
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;
}
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)
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)
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
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
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
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Map.html
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
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.