Tengo una función de análisis sintáctico que analiza una longitud codificada desde 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.Java: mejor manera de pasar int por referencia
Respuesta
Puede intentar usar org.apache.commons.lang.mutable.MutableInt
de la biblioteca Apache Commons. No hay una forma directa de hacer esto en el lenguaje mismo.
No puede pasar argumentos por referencia en Java.
Lo que puede hacer es ajustar su valor entero en un objeto mutable. Usar Apache Commons 'MutableInt
es una buena opción. Otra forma ligeramente ofuscada es usar 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.
Esto no es posible en Java. Como ha sugerido, una forma es aprobar int[]
. Otro sería tener una pequeña clase, por ej. IntHolder
que envolvió un int
.
Ajustar 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.
Exactamente. No obligue a Java a hacerlo a su manera, hágalo de la manera Java. Java no es C. Los intentos de hacerlo actuar como C siempre serán feos piratas informáticos. –
Usted puede diseñar nueva clase como esta:
public class Inte{
public int x=0;
}
Más tarde se puede crear el objeto de esta clase:
Inte inte=new Inte();
entonces puede pasar inte
como argumento en el que desea pasar una variable entera :
public void function(Inte inte) {
some code
}
por lo que para la actualización del valor entero:
inte.x=value;
para obtener el valor:
Variable=inte.x;
Usted puede utilizar java.util.concurrent.atomic.AtomicInteger
.
Puede crear una clase de referencia para envolver primitivas:
public class Ref<T>
{
public T Value;
public Ref(T value)
{
Value = value;
}
}
continuación, puede crear funciones que toman un referente como parámetros:
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.
- 1. ¿Hay una mejor manera de pasar por referencia en Perl?
- 2. C++ 64 bit int: pasar por referencia o pasar por valor
- 3. ¿Puedo pasar parámetros por referencia en Java?
- 4. Bash - Pasar argumentos por referencia
- 5. objeto de Java a int: ¿una mejor manera?
- 6. Pasar una matriz por referencia
- 7. Problema al pasar por referencia
- 8. Pasando por referencia en Java?
- 9. ¿Es mejor pasar por valor o por referencia para los tipos de datos básicos?
- 10. ¿Pasa Java por referencia?
- 11. Al pasar datos primitivos por referencia en Java
- 12. ¿Cómo pasar un argumento de tupla de la mejor manera?
- 13. Cuándo pasar por referencia en PHP
- 14. C# Pasar una propiedad por referencia
- 15. PDO pasar por aviso de referencia? Este
- 16. Pasar argumentos de matriz por referencia
- 17. paso por el puntero y Pasar por referencia
- 18. Solo se pueden pasar variables por referencia
- 19. ¿Por qué no pasar estructura por referencia una optimización común?
- 20. ¿Cuál es la diferencia entre pasar por referencia en Java y pasar un puntero en C?
- 21. arrays PHP y pasar por referencia
- 22. 'pasar parámetro por referencia' en Ruby?
- 23. PHP Pasar por referencia en foreach
- 24. ¿es posible pasar por referencia en RMI?
- 25. Pasar std algos predicados por referencia en C++
- 26. ¿cuál es la diferencia entre pasar por referencia y llamar por referencia?
- 27. pase de Java por referencia
- 28. ¿Por qué ENUM es mejor que INT
- 29. ¿Por qué pasar por referencia implica un constructor de copia?
- 30. Pasar cadenas de C++ por valor o por referencia
'Entero 'es inmutable. –
Si desea evitar la biblioteca apache, puede pasar el int y devolver el valor actualizado. Si se trata de dos valores, recomiendo usar Point como contenedor. De lo contrario, la opción de matriz o una de las otras sugerencias aquí está bien. – EntangledLoops
Debería devolver un int o un objeto; Si realmente necesita más de uno, tal vez debería reconsiderar su diseño de 'clases' –