So etwas wie das Folgende:
Referenzbeispiel:
void changeString(ref String str) {
str = "def";
}
void main() {
String abc = "abc";
changeString(ref abc);
System.out.println(abc); //prints "def"
}
Beispiel:
void changeString(out String str) {
str = "def";
}
void main() {
String abc;
changeString(out abc);
System.out.println(abc); //prints "def"
}
ref
oderout
in C # verwende, ist, wenn ich ein Muster wie verwendeTryParse()
, bei dem die Methode ein boolesches Ergebnis zurückgibt, und die einzige Möglichkeit, einen analysierten Wert daraus zu erhalten, ist die Verwendung vonref
oderout
.Antworten:
Nein, Java verfügt nicht über C #
ref
undout
Schlüsselwörter, die als Referenz übergeben werden können.Sie können in Java nur Werte übergeben. Auch Referenzen werden als Wert übergeben. Siehe Jon Skeet ‚s Seite über Parameter in Java vorbei für weitere Details.
Um etwas zu tun ähnlich wie
ref
oderout
Sie müßten Ihre Parameter in einem anderen Objekt wickeln und das Objekt Verweis übergeben als Parameter.quelle
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&
) als Wert, ja. Aber C # hat eine eigene Terminologie und enthält insbesondere keine Werte vom Typref T
- aus C # -Perspektiveref
ist es ausschließlich ein Parametermodifikator, und es macht keinen Sinn, davon zu sprechen, dass eine Referenz als Wert übergeben wird .Direkte Antwort: Nein
Sie können die Referenz jedoch mit Wrappern simulieren .
Und machen Sie folgendes:
aus
Und im Grunde jeder andere Typ wie:
quelle
Soweit ich weiß, gibt es in der Java- Sprache weder ein ref noch ein out- Schlüsselwortäquivalent . Ich habe jedoch gerade einen C # -Code in Java umgewandelt , der out- Parameter verwendet und berät, was ich gerade getan habe. Sie sollten jedes Objekt in eine Wrapper-Klasse einschließen und die in der Wrapper-Objektinstanz eingeschlossenen Werte wie folgt übergeben.
Ein einfaches Beispiel für die Verwendung von Wrapper
Hier ist die Wrapper-Klasse ;
Und hier ist der Testcode;
Ein Beispiel aus der realen Welt
AC # .NET-Methode mit out-Parameter
Hier gibt es eine C # .NET- Methode, die das Schlüsselwort out verwendet .
Java Entspricht dem C # -Code, der den Parameter out verwendet
Das Java- Äquivalent dieser Methode mit Hilfe der Wrapper-Klasse lautet wie folgt:
Wrapper-Klasse
Die in diesem Java-Code verwendete Wrapper-Klasse lautet wie folgt.
quelle
Java übergibt Parameter als Wert und verfügt über keinen Mechanismus, um die Referenzübergabe zuzulassen. Das heißt, wenn ein Parameter übergeben wird, wird sein Wert in den Stapelrahmen kopiert, der den Aufruf verarbeitet.
Der Begriff Wert, wie ich ihn hier verwende, bedarf einer kleinen Klärung. In Java gibt es zwei Arten von Variablen - Grundelemente und Objekte. Ein Wert eines Grundelements ist das Grundelement selbst, und der Wert eines Objekts ist seine Referenz (und nicht der Zustand des Objekts, auf das verwiesen wird). Daher ändert jede Änderung des Werts innerhalb der Methode nur die Kopie des Werts im Stapel und wird vom Aufrufer nicht gesehen. Zum Beispiel gibt es keine Möglichkeit, eine echte Swap-Methode zu implementieren, die zwei Referenzen empfängt und diese austauscht (nicht ihren Inhalt!).
quelle
Wie viele andere musste ich ein C # -Projekt nach Java konvertieren. Ich habe nicht eine komplette Lösung , die im Internet in Bezug auf finden heraus und ref Modifikatoren. Aber ich konnte die Informationen, die ich gefunden hatte, nutzen und erweitern, um meine eigenen Klassen zu erstellen, um die Anforderungen zu erfüllen. Ich wollte aus Gründen der Codeklarheit zwischen ref- und out- Parametern unterscheiden. Mit den folgenden Klassen ist es möglich. Mögen diese Informationen anderen Zeit und Mühe sparen.
Ein Beispiel ist im folgenden Code enthalten.
quelle
Drei nicht offiziell explizit erwähnte Lösungen:
Für Pair würde ich empfehlen: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html
quelle
Java hat keine Standardmethode. Die meisten Swaps werden auf der Liste durchgeführt, die in der Klasse verpackt ist. aber es gibt einen inoffiziellen Weg, dies zu tun:
quelle