Quelque chose comme ce qui suit:
exemple ref:
void changeString(ref String str) {
str = "def";
}
void main() {
String abc = "abc";
changeString(ref abc);
System.out.println(abc); //prints "def"
}
out exemple:
void changeString(out String str) {
str = "def";
}
void main() {
String abc;
changeString(out abc);
System.out.println(abc); //prints "def"
}
ref
ouout
en C #, c'est lorsque j'utilise un modèle commeTryParse()
, où la méthode renvoie un résultat booléen, et la seule façon d'en obtenir une valeur analysée est d'utiliserref
ouout
.Réponses:
Non, Java n'a pas quelque chose comme C #
ref
etout
mots clés pour passer par référence.Vous ne pouvez passer que par valeur en Java. Même les références sont passées par valeur. Voir la page de Jon Skeet sur la transmission de paramètres en Java pour plus de détails.
Pour faire quelque chose de similaire à
ref
ou,out
vous devez envelopper vos paramètres dans un autre objet et passer cette référence d'objet en tant que paramètre.la source
ref
.Reference parameters need the ref modifier as part of both the declaration and the invocation - that means it's always clear when you're passing something by reference.
yoda.arachsys.com/csharp/parameters.htmlT&
) par valeur, oui. Mais C # a sa propre terminologie, et il n'inclut pas spécifiquement des choses telles que les valeurs de typeref T
- du point de vue C #,ref
est strictement un modificateur de paramètre, et parler de "passer une référence par valeur" par rapport à cela n'a pas de sens .Réponse directe: non
Mais vous pouvez simuler une référence avec des wrappers .
Et procédez comme suit:
En dehors
Et fondamentalement tout autre type tel que:
la source
En fait, il n'y a ni ref ni out équivalent mot-clé en langage Java pour autant que je sache. Cependant, je viens de transformer un code C # en Java qui utilise un paramètre et vous conseillera ce que je viens de faire. Vous devez envelopper n'importe quel objet dans une classe wrapper et transmettre les valeurs encapsulées dans l'instance d'objet wrapper comme suit;
Un exemple simple d'utilisation de Wrapper
Voici la classe Wrapper ;
Et voici le code de test;
Un exemple du monde réel
Méthode AC # .NET utilisant le paramètre out
Ici, il existe une méthode C # .NET qui utilise le mot clé out ;
Java Equivalent du code C # utilisant le paramètre out
Et l' équivalent Java de cette méthode à l'aide de la classe wrapper est le suivant;
Classe Wrapper
Et la classe wrapper utilisée dans ce code Java est comme ci-dessous;
la source
Java passe les paramètres par valeur et ne dispose d'aucun mécanisme pour autoriser le passage par référence. Cela signifie que chaque fois qu'un paramètre est passé, sa valeur est copiée dans le cadre de pile qui gère l'appel.
Le terme valeur tel que je l'utilise ici a besoin d'un peu de clarification. En Java, nous avons deux types de variables: les primitives et les objets. Une valeur d'une primitive est la primitive elle-même, et la valeur d'un objet est sa référence (et non l'état de l'objet référencé). Par conséquent, toute modification de la valeur à l'intérieur de la méthode changera uniquement la copie de la valeur dans la pile et ne sera pas vue par l'appelant. Par exemple, il n'y a aucun moyen d'implémenter une véritable méthode d'échange, qui reçoit deux références et les échange (pas leur contenu!).
la source
Comme beaucoup d'autres, j'avais besoin de convertir un projet C # en Java. Je n'ai pas trouvé de solution complète sur le Web concernant les modificateurs out et ref . Mais j'ai pu prendre les informations que j'ai trouvées et les développer pour créer mes propres classes afin de répondre aux exigences. Je voulais faire une distinction entre les paramètres ref et out pour la clarté du code. Avec les classes ci-dessous, c'est possible. Puisse cette information faire gagner du temps et des efforts aux autres.
Un exemple est inclus dans le code ci-dessous.
la source
Trois solutions non officiellement mentionnées explicitement:
Pour Pair, je recommanderais: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html
la source
java n'a pas de méthode standard pour le faire. La plupart des échanges seront effectués sur la liste qui est emballée dans la classe. mais il existe un moyen non officiel de le faire:
la source