In PL / SQL (oder vielen anderen Sprachen) kann ich IN OUT- oder OUT-Parameter haben, die von einer Prozedur zurückgegeben werden. Wie kann ich eine ähnliche Sache in Java erreichen?
Ich kenne diesen Trick:
%Vor% Dabei steht der Parameter in
für einen IN-Parameter und der Parameter inOut
für einen Rückgabewert. Die Konvention wäre, dass String[] inOut
ein Array von inOut.length == 1
ist.
Das ist irgendwie tollpatschig.
BEARBEITEN Feedback zu Antworten : Weitere Tricks:
Weiß jemand einen besseren Weg, dies allgemein zu erreichen? Der Grund, warum ich eine allgemeine Lösung brauche, ist, weil ich in einem Datenbankschema aus PL / SQL bequemen Quellcode erzeugen möchte.
Meine Frage wäre: Warum gibt method
nichts zurück? Anstatt ein In / Out-Argument zu setzen?
Aber vorausgesetzt Sie absolut, muss positiv ein In / Out-Argument haben, was eine ganz andere Frage ist, dann ist der Array-Trick in Ordnung. Alternativ ist es nicht weniger ungeschickt, aber die andere Möglichkeit besteht darin, eine Objektreferenz zu übergeben:
%Vor% (Oder machen Sie einfach value
public.) Sehen Sie? Ich sagte, es war nicht weniger tollpatschig.
Aber ich würde noch einmal fragen: Kann method
nicht etwas zurückgeben? Und wenn es mehrere Dinge zurückgeben muss, kann es dann keine Objektinstanz mit Eigenschaften für diese Dinge zurückgeben?
Off-topic: Dies ist einer der Bereiche, in denen ich den C # -Ansatz wirklich mag. Eines der Argumente gegen In / Out-Argumente ist, dass sie an der Stelle unklar sind, an der Sie die Funktion aufrufen . C # macht es also klar, indem Sie das Schlüsselwort sowohl bei der Deklaration der Funktion als auch beim Aufruf angeben. In Ermangelung dieser Art von syntaktischer Hilfe, würde ich vermeiden, "in / out Argumente" zu simulieren.
Java kopiert alles, was Sie als Argument übergeben. Wenn Sie eine primitive Inside-Methode übergeben, haben Sie eine Kopie dieses Primitivs, und keine Änderungen beeinflussen die tatsächliche Variable außerhalb der Methode. Wenn Sie ein Objekt übergeben, übergeben Sie eine Kopie der Referenz, die tatsächlich auf das ursprüngliche Objekt verweist. Auf diese Weise können Sie Änderungen an den Kontext von etwas weitergeben, das die Methode aufgerufen hat - indem Sie den Status des Objekts ändern, auf das die Referenz verweist. Sehen Sie mehr dazu: Ist Java nach Wert oder Referenz?
Es gibt keinen direkten Weg. Andere Technik umfassen:
Wenn Sie darüber nachdenken, ist der Array-Trick nicht unähnlich mit der Übergabe eines T * in C / C ++
Tags und Links language-agnostic java parameters out-parameters