바이트 버퍼에서 인코딩 된 길이를 구문 분석하는 구문 분석 함수가 있으며, 구문 분석 된 길이를 int로 반환하고, 인덱스를 정수 인수로 버퍼에 가져옵니다. 함수가 구문 분석 된 내용에 따라 인덱스를 업데이트하기를 원합니다. 즉, 해당 인덱스를 참조로 전달하고 싶습니다. C에서는 int *
. Java에서이 작업을 수행하는 가장 깨끗한 방법은 무엇입니까? 현재 인덱스 인수 전달을 검토 중입니다. 로 int[]
,하지만 약간 못 생겼습니다.
바이트 버퍼에서 인코딩 된 길이를 구문 분석하는 구문 분석 함수가 있으며, 구문 분석 된 길이를 int로 반환하고, 인덱스를 정수 인수로 버퍼에 가져옵니다. 함수가 구문 분석 된 내용에 따라 인덱스를 업데이트하기를 원합니다. 즉, 해당 인덱스를 참조로 전달하고 싶습니다. C에서는 int *
. Java에서이 작업을 수행하는 가장 깨끗한 방법은 무엇입니까? 현재 인덱스 인수 전달을 검토 중입니다. 로 int[]
,하지만 약간 못 생겼습니다.
답변:
Java에서는 참조로 인수를 전달할 수 없습니다.
할 수있는 일은 정수 값을 가변 객체로 감싸는 것입니다. Apache Commons를 사용 MutableInt
하는 것이 좋은 선택입니다. 약간 더 난독 한 또 다른 방법은 int[]
제안한 것과 같은 것을 사용하는 것입니다. 왜 int
단일 셀 배열 로 래핑하는지 명확하지 않기 때문에 사용하지 않을 것 입니다.
참고 java.lang.Integer
변경할 수 없습니다.
사용할 수 있습니다 java.util.concurrent.atomic.AtomicInteger
.
바이트 버퍼와 인덱스를 ByteBuffer 객체 로 래핑 합니다. ByteBuffer는 버퍼 + 위치의 개념을 캡슐화하고 인덱스 된 위치에서 읽고 쓸 수 있도록하여 진행하면서 업데이트합니다.
참조 클래스를 만들어 기본 요소를 래핑 할 수 있습니다.
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
도움이 되었기를 바랍니다.
Integer
불변입니다.