Tengo una función de análisis que analiza una longitud codificada de un búfer de bytes, devuelve la longitud analizada como un int y toma un índice en el búfer como un argumento entero. Quiero que la función actualice el índice de acuerdo con lo que se analiza, es decir, quiero pasar ese índice por referencia. En C simplemente pasaría un int *
. ¿Cuál es la forma más limpia de hacer esto en Java? Actualmente estoy buscando pasar el índice arg. como un int[]
, pero es un poco feo.
java
pass-by-reference
Fred Basset
fuente
fuente
Integer
es inmutable.Respuestas:
Puede intentar usarlo
org.apache.commons.lang.mutable.MutableInt
desde la biblioteca Apache Commons. No hay una forma directa de hacer esto en el propio idioma.fuente
Esto no es posible en Java. Como ha sugerido, una forma es pasar un
int[]
. Otro sería tener una pequeña clase, por ejemplo,IntHolder
que envuelva unint
.fuente
No puede pasar argumentos por referencia en Java.
Lo que puede hacer es envolver su valor entero en un objeto mutable. Usar Apache Commons '
MutableInt
es una buena opción. Otra forma, un poco más ofuscada, es usar unaint[]
como sugirió. No lo usaría ya que no está claro por qué está envolviendo unint
en una matriz unicelular.Tenga en cuenta que
java.lang.Integer
es inmutable.fuente
Puede utilizar
java.util.concurrent.atomic.AtomicInteger
.fuente
Envuelva el búfer de bytes y el índice en un objeto ByteBuffer . Un ByteBuffer encapsula el concepto de búfer + posición y le permite leer y escribir desde la posición indexada, que actualiza a medida que avanza.
fuente
Puedes diseñar una nueva clase como esta:
public class Inte{ public int x=0; }
luego puedes crear un objeto de esta clase:
Inte inte=new Inte();
luego puede pasar
inte
como argumento donde desea pasar una variable entera:public void function(Inte inte) { some code }
así que para actualizar el valor entero:
por obtener valor:
fuente
Puede crear una clase de referencia para envolver primitivas:
public class Ref<T> { public T Value; public Ref(T value) { Value = value; } }
Luego puede crear funciones que tomen una referencia como parámetro:
public class Utils { public static <T> void Swap(Ref<T> t1, Ref<T> t2) { T temp = t1.Value; t1.Value = t2.Value; t2.Value = temp; } }
Uso:
Ref<Integer> x = 2; Ref<Integer> y = 9; Utils.Swap(x, y); System.out.println("x is now equal to " + x.Value + " and y is now equal to " + y.Value"; // Will print: x is now equal to 9 and y is now equal to 2
Espero que esto ayude.
fuente