У меня есть функция синтаксического анализа, которая анализирует кодированную длину из байтового буфера, возвращает синтаксическую длину как int и принимает индекс в буфер как целочисленный arg. Я хочу, чтобы функция обновляла индекс в соответствии с тем, что он разобрал, т. Е. Хочет передать этот индекс по ссылке. В C я просто передал int *
. Какой самый чистый способ сделать это на Java? Я сейчас смотрю на передачу индекса arg. как int[]
, но это немного уродливо.Java: Лучший способ передать int по ссылке
ответ
Вы можете использовать org.apache.commons.lang.mutable.MutableInt
из библиотеки Apache Commons. Нет прямого способа сделать это в самом языке.
Вы не можете передавать аргументы по ссылке в Java.
Что вы можете сделать, это обернуть целочисленное значение в изменяемый объект. Использование Apache Commons MutableInt
- хороший вариант. Другой, немного более запутанный способ, заключается в использовании int[]
, как вы предполагали. Я бы не использовал его, так как неясно, почему вы обертываете int
в одноядерном массиве.
Отметьте, что java.lang.Integer
является неизменным.
Это невозможно в Java. Как вы сказали, один из способов - передать int[]
. У другого может быть небольшой класс, например. IntHolder
, который обернул int
.
Оберните буфер и указатель байта в объект ByteBuffer. ByteBuffer инкапсулирует концепцию положения буфера + и позволяет вам читать и писать из индексированной позиции, которую он обновляет по мере продвижения.
Точно. Не заставляйте Java делать это по-своему, делайте это по-разному. Java не C. Попытки заставить его действовать, как C, всегда будут уродливыми хаками. –
Вы можете создать новый класс, как это:
public class Inte{
public int x=0;
}
позже вы можете создать объект этого класса:
Inte inte=new Inte();
, то вы можете передать inte
в качестве аргумента, где вы хотите передать целочисленную переменную :
public void function(Inte inte) {
some code
}
поэтому для обновления целочисленного значения:
inte.x=value;
для получения значения:
Variable=inte.x;
Вы можете использовать java.util.concurrent.atomic.AtomicInteger
.
Вы можете создать ссылку на класс завернуть примитивов:
public class Ref<T>
{
public T Value;
public Ref(T value)
{
Value = value;
}
}
Затем вы можете создавать функции, которые принимают Ссылку в качестве параметров:
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;
}
}
Использование:
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
Надеюсь это поможет.
- 1. Java - передать переменную по ссылке
- 2. Передать по ссылке в java?
- 3. Передать по значению и передать по ссылке в java
- 4. pymongo: Лучший способ запроса по ссылке?
- 5. Лучший способ обновить атрибут ActiveRecord по ссылке
- 6. Как передать varargs по ссылке в Java
- 7. Передать по ссылке
- 8. передать массив по ссылке
- 9. Передача по ссылке в Java
- 10. нужно передать строку по ссылке в Java
- 11. Java: передать объект в указателе в параметре (передать по ссылке)
- 12. как передать ссылку по ссылке в java
- 13. передать HashMap по ссылке
- 14. Java-объект для int: лучший способ?
- 15. Лучший способ передать Java ссылку вниз по цепочке объектов
- 16. передать массив по ссылке
- 17. F # передать по ссылке
- 18. Как передать подстроку по ссылке?
- 19. Передать указатель/передать по ссылке в C
- 20. QuickSort, передать по ссылке, рекурсия
- 21. Java: передать по значению или пройти по ссылке
- 22. Как передать функцию по ссылке?
- 23. Попытка передать матрицу по ссылке
- 24. Лучший способ передать параметры делегата
- 25. Как передать свойство по ссылке
- 26. Передать по ссылке для блоков
- 27. Схема R5RS: передать по ссылке
- 28. Лучший способ передать переменные?
- 29. передать по ссылке: никакого известного преобразования для аргумента 6 из 'int' в 'int &
- 30. Как передать примитивный тип данных по ссылке?
'Integer' является неизменным. –
Если вы хотите избежать библиотеки apache, вы можете передать int и вернуть обновленное значение. Если это два значения, я рекомендую использовать Point в качестве контейнера. В противном случае параметр массива или одно из других предложений здесь прекрасное. – EntangledLoops
Вы должны возвращать int или объект; Если вам действительно нужно больше одного, возможно, вам следует переосмыслить свой дизайн «классов» –