dans PL / SQL (ou de nombreuses autres langues), je peux avoir des paramètres OUT ou OUT, qui sont renvoyés à partir d'une procédure. Comment puis-je obtenir une chose similaire dans Java?
Je connais ce truc: p> où le paramètre C'est un peu maladroit. p> Est-ce que quelqu'un sait un meilleur moyen d'y parvenir en général? La raison pour laquelle j'ai besoin d'une solution générale est parce que je souhaite générer un code source de commodité de PL / SQL dans un schéma de base de données. P> p> in code> représente un paramètre et le
Inout Le paramètre code> peut contenir une valeur de retour. La convention serait que
chaîne [] inout code> est une matrice de
inuite.length == 1 code>. P>
3 Réponses :
Ma question serait la suivante: pourquoi ne Mais vous supposant que absolument, de manière positive em> avoir un argument d'entrée dans / sorti, qui est une question complète, alors le truc de tableau est bien. Alternativement, ce n'est pas moins maladroit, mais l'autre moyen est de passer dans une référence d'objet: p> (ou, bien sûr, faites simplement une valeur code> code> public.) Voir? J'ai dit que ce n'était pas moins maladroit. P> Mais je demanderais à nouveau: ne peut pas hors sujet: strong> C'est l'un des domaines où je suis vraiment comme l'approche C #. L'un des arguments contre les arguments d'entrée d'entrée est qu'ils ne sont pas clairs au point où vous êtes appeler em> la fonction. Donc, c # vous fait préciser, en spécifiant le mot-clé à la fois à la déclaration de la fonction et em> lorsque vous l'appelez. Dans l'absence de ce type d'aide syntaxique, j'éviterais des arguments de "simulation" dans / arrière. P> p> code> retour em> quelque chose? Plutôt que de définir un argument dans / sortant?
méthode code> renvoyer quelque chose? Et s'il doit renvoyer plusieurs choses, je ne peux pas renvoyer une instance d'objet avec des propriétés pour ces choses? P>
La méthode ne pourra pas renvoyer une seule valeur, car j'ai besoin d'une solution Général B>. J'ai adapté l'exemple pour tenir plusieurs paramètres Out Out. Mais peut-être retourner un objet de résultat généré (en maintenant les paramètres in sortés) pourraient en réalité être une option. +1 pour ça.
Vous avez raison sur votre commentaire hors sujet. En général, je n'ai pas besoin de paramètres. Mais comme je génère un code source du code PL / SQL réel, je ne peux pas faire sans ...: - /
Dans mon cas, j'ai besoin d'inonder parce que la méthode renvoie déjà autre chose.
Il n'y a pas de mauvaise façon. Une autre technique comprend: p>
Si vous y pensez, le truc de tableau n'est pas différent de passer un T * en C / C ++ P>
Merci pour vos notes. J'ai pensé à ces choses aussi, malheureusement, ils ne travailleront pas dans mon cas ...
Java copie tout ce que vous passez comme un argument. Si vous passez une méthode primitive, vous avez une copie de cette primitive et aucune modification n'affectera la méthode extérieure variable réelle. Si vous passez objet, vous passez une copie de référence, qui fait référence à l'objet d'origine. C'est la façon dont vous pouvez propager les modifications au contexte de quelque chose qui appelait la méthode - en modifiant l'état de l'objet que la référence est "pointant". En voir plus Sinon: Java passe-t-il par valeur ou par référence ? p>
Merci, je sais que Java ne passe pas les pointeurs réels, mais des "copies de référence". C'est pourquoi j'ai trouvé le tour de la matrice. C'est un moyen très courant de simuler des pointeurs en Java ...
+1 pour expliquer en réalité la sémantique passe-valeur, Java utilise de manière logique. Il y a trop peu de gens comme vous dans le monde d'aujourd'hui ...
@Lukas: Je sais que Java ne passe pas les pointeurs réels, mais "Copies de référence" i> Ce qui n'est qu'un autre terme pour les pointeurs. ;-)
@ T.J. Crowder: Pour autant que je sache en C / C ++, vous pouvez attribuer une nouvelle valeur à un pointeur qui sera en mesure de quitter la portée de la méthode. En Java, cela n'est pas possible, comme l'expliquait correctement. Le "pointeur" est transmis par la valeur à la méthode, pas par référence
@Lukas: "Autant que je sache en C / C ++, vous pouvez affecter une nouvelle valeur à un pointeur qui sera capable de quitter la portée de la méthode. En Java, ce n'est pas possible ..." << / i> Les références d'objet de Java ( Void FOO (MyObject M) Code>) sont des analogues exacts des pointeurs C / C ++ (
Void FOO (MyObject * PM) code>). Vous pouvez attribuer à
m code> (java) ou
mp code> (C / C ++), mais qui n'a aucun effet sur quoi que ce soit à l'extérieur
foo code> . Mais C / C ++ a des pointeurs aux pointeurs i>:
void foo (myObject ** ppm) code>, où l'effet de l'écriture sur
* ppm code> peut être vu dans la méthode d'appel. L'analogue de Java est le truc de la matrice que l'OP a marqué.
@Lukas: (continue) mais accordé, je ne pense pas immédiatement à un Java équivalent à un pointeur à un pointeur à un pointeur i>, Void FOO (MyObject *** PPPM) code>. :-)
Ok, c'est ce que je voulais dire. Merci pour la clarification
"Valeurs de retour: J'aimerais une solution générale. C'est-à-dire une avec plusieurs paramètres de sortie impliqués" i> voir ma réponse. Plusieurs paramètres par in / out? Renvoie une instance d'objet avec des propriétés pour chacun. Sauf que, non, il n'y a rien de mieux que le tour de la matrice.
Quand j'ai commencé à apprendre Java, après de nombreuses années de développement C / C ++, j'ai également cherché un moyen de passer par référence. Mais maintenant, des années après cela, je ne peux plus me rappeler la dernière fois que je voulais faire ça. Le truc de tableau est moins élégant que d'autres approches citées dans ces réponses et commentaires.