Java: la mejor forma de pasar int por referencia

Tengo una función de análisis sintáctico 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 entero arg. Quiero que la función actualice el índice de acuerdo con lo que se analiza, es decir, desea pasar ese índice por referencia. En C me gustaría pasar un int * . ¿Cuál es la forma más limpia de hacer esto en Java? Actualmente estoy buscando pasar el índice arg. como int[] , pero es un poco feo.

Puede intentar usar org.apache.commons.lang.mutable.MutableInt desde la biblioteca de Apache Commons. No hay una forma directa de hacer esto en el lenguaje mismo.

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 envolvió un int .

No puede pasar argumentos por referencia en Java.

Lo que puede hacer es ajustar su valor entero en un objeto mutable. Usando Apache Commons ‘ MutableInt es una buena opción. Otra forma ligeramente ofuscada es utilizar un int[] como sugirió. No lo usaría, ya que no está claro por qué está envolviendo un int en una matriz unicelular.

Tenga en cuenta que java.lang.Integer es inmutable.

Envuelva el búfer de bytes y el índice en un objeto ByteBuffer . Un ByteBuffer encapsula el concepto de una posición buffer + y le permite leer y escribir desde la posición indexada, que se actualiza a medida que avanza.

Puede usar java.util.concurrent.atomic.AtomicInteger .

Puedes diseñar una clase nueva como esta:

 public class Inte{ public int x=0; } 

más tarde puedes crear un objeto de esta clase:

 Inte inte=new Inte(); 

entonces puedes pasar inte como argumento donde quieres pasar una variable entera:

 public void function(Inte inte) { some code } 

para actualizar el valor entero:

 inte.x=value; 

para obtener valor:

 Variable=inte.x; 

Puede crear una clase de referencia para envolver primitivas:

 public class Ref { public T Value; public Ref(T value) { Value = value; } } 

Luego puede crear funciones que toman una Referencia como parámetro:

 public class Utils { public static  void Swap(Ref t1, Ref t2) { T temp = t1.Value; t1.Value = t2.Value; t2.Value = temp; } } 

Uso:

 Ref x = 2; Ref 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.