バイトバッファーからエンコードされた長さを解析する解析関数があり、解析された長さをintとして返し、バッファーへのインデックスを整数argとして受け取ります。解析された内容に応じて関数にインデックスを更新させたい、つまり、そのインデックスを参照で渡したいCでは、int *
を渡すだけです。 Javaでこれを行う最もクリーンな方法は何ですか?現在、インデックス引数を渡すことを検討しています。 int[]
としてですが、少しugいです。
Apache Commonsライブラリのorg.Apache.commons.lang.mutable.MutableInt
を使用してみてください。言語自体でこれを行う直接的な方法はありません。
これはJavaでは不可能です。提案した1つの方法は、int[]
を渡すことです。もう1つは、小さなクラスを持つことです。 IntHolder
をラップしたint
。
Javaでは参照渡しで引数を渡すことはできません。
できることは、整数値を可変オブジェクトにラップすることです。 Apache CommonsのMutableInt
を使用するのが適切なオプションです。もう少し難解な方法は、あなたが提案したようにint[]
を使用することです。単一セル配列でint
をラップしている理由が不明であるため、使用しません。
Java.lang.Integer
は不変であることに注意してください。
バイトバッファーをラップし、インデックスを ByteBuffer オブジェクトに入れます。 ByteBufferは、buffer + positionの概念をカプセル化し、インデックス化された位置から読み書きできるようにします。
Java.util.concurrent.atomic.AtomicInteger
を使用できます。
次のように新しいクラスを設計できます。
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;
Referenceクラスを作成して、プリミティブをラップできます。
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
お役に立てれば。