Java: Лучший способ передать интервал ссылкой

У меня есть функция парсинга, которая анализирует закодированную длину от буфера байта, это возвращает проанализированную длину как интервал и берет индекс в буфер как целочисленный аргумент. Я хочу, чтобы функция обновила индекс согласно тому, что это анализируется, т.е. хотят передать тот индекс ссылкой. В C я просто передал бы int *. Что самый чистый путь состоит в том, чтобы сделать это в Java? Я в настоящее время смотрю на передачу индексного аргумента как int[], но это немного ужасно.

79
задан Phil Ross 24 July 2010 в 17:36
поделиться

4 ответа

Вы можете попробовать использовать org.apache.commons.lang.mutable.MutableInt из библиотеки Apache Commons. В самом языке нет прямого способа сделать это.

71
ответ дан 24 November 2019 в 10:13
поделиться

Это невозможно в Java. Как вы предложили, один из способов - передавать int[]. Другой способ - иметь небольшой класс, например, IntHolder, который обернут int.

20
ответ дан 24 November 2019 в 10:13
поделиться

Заверните байтовый буфер и индекс в объект ByteBuffer. ByteBuffer инкапсулирует концепцию буфера+позиция и позволяет читать и писать из индексированной позиции, которую он обновляет по мере выполнения.

13
ответ дан 24 November 2019 в 10:13
поделиться

Вы не можете передавать аргументы по ссылке в Java.

Что вы можете сделать, так это обернуть целочисленное значение в изменяемый объект. Хорошим вариантом является использование MutableInt от Apache Commons. Другой, немного более запутанный способ - использовать int[], как вы предложили. Я бы не стал его использовать, поскольку неясно, зачем вы оборачиваете int в одноклеточный массив.

Обратите внимание, что java.lang.Integer является неизменяемым.

16
ответ дан 24 November 2019 в 10:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: