Algo parecido a lo siguiente:
ejemplo de referencia:
void changeString(ref String str) {
str = "def";
}
void main() {
String abc = "abc";
changeString(ref abc);
System.out.println(abc); //prints "def"
}
ejemplo:
void changeString(out String str) {
str = "def";
}
void main() {
String abc;
changeString(out abc);
System.out.println(abc); //prints "def"
}
ref
oout
en C # es cuando estoy usando un patrón comoTryParse()
, donde el método devuelve un resultado booleano, y la única forma de obtener un valor analizado es usandoref
oout
.Respuestas:
No, Java no tiene algo como C #
ref
yout
palabras clave para pasar por referencia.Solo puede pasar por valor en Java. Incluso las referencias se pasan por valor. Consulte la página de Jon Skeet sobre el paso de parámetros en Java para obtener más detalles.
Para hacer algo similar a
ref
oout
tendría que envolver sus parámetros dentro de otro objeto y pasar esa referencia de objeto como parámetro.fuente
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&
) por valor, sí. Pero C # tiene su propia terminología, y específicamente no incluye cosas como valores de tiporef T
; desde la perspectiva de C #,ref
es estrictamente un modificador de parámetro, y hablar de "pasar una referencia por valor" con respecto a él no tiene sentido .Respuesta directa: No
Pero puede simular referencias con envoltorios .
Y haz lo siguiente:
Fuera
Y básicamente cualquier otro tipo como:
fuente
En realidad, no hay ni ref ni un equivalente de palabra clave en el lenguaje Java que yo sepa. Sin embargo, acabo de transformar un código C # en Java que usa nuestro parámetro y le aconsejaré lo que acabo de hacer. Debe envolver cualquier objeto en una clase contenedora y pasar los valores envueltos en la instancia del objeto contenedor de la siguiente manera;
Un ejemplo simple para usar Wrapper
Aquí está la clase Wrapper ;
Y aquí está el código de prueba;
Un ejemplo del mundo real
Método AC # .NET usando el parámetro out
Aquí hay un método de C # .NET que usa nuestra palabra clave;
Java Equivalente del código C # que usa el parámetro out
Y el equivalente en Java de este método con la ayuda de la clase contenedora es el siguiente;
Clase de envoltura
Y la clase contenedora utilizada en este código Java es la siguiente;
fuente
Java pasa los parámetros por valor y no tiene ningún mecanismo para permitir el paso por referencia. Eso significa que cada vez que se pasa un parámetro, su valor se copia en el marco de pila que maneja la llamada.
El término valor tal como lo uso aquí necesita una pequeña aclaración. En Java tenemos dos tipos de variables: primitivas y objetos. Un valor de una primitiva es la propia primitiva, y el valor de un objeto es su referencia (y no el estado del objeto al que se hace referencia). Por lo tanto, cualquier cambio en el valor dentro del método solo cambiará la copia del valor en la pila y no será visto por la persona que llama. Por ejemplo, no hay forma de implementar un método de intercambio real, que reciba dos referencias y las intercambie (¡no su contenido!).
fuente
Como muchos otros, necesitaba convertir un proyecto de C # a Java. No encontré una solución completa en la web con respecto a los modificadores de salida y referencia . Pero pude tomar la información que encontré y ampliarla para crear mis propias clases para cumplir con los requisitos. Quería hacer una distinción entre los parámetros ref y out para la claridad del código. Con las clases siguientes, es posible. Que esta información ahorre tiempo y esfuerzo a otros.
Se incluye un ejemplo en el código siguiente.
fuente
Tres soluciones no mencionadas oficialmente, explícitamente:
Para Pair, recomendaría: https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html
fuente
java no tiene una forma estándar de hacerlo. La mayoría de los intercambios se realizarán en la lista empaquetada en la clase. pero hay una forma no oficial de hacerlo:
fuente