web-dev-qa-db-ja.com

Java:参照によりintを渡す最良の方法

バイトバッファーからエンコードされた長さを解析する解析関数があり、解析された長さをintとして返し、バッファーへのインデックスを整数argとして受け取ります。解析された内容に応じて関数にインデックスを更新させたい、つまり、そのインデックスを参照で渡したいCでは、int *を渡すだけです。 Javaでこれを行う最もクリーンな方法は何ですか?現在、インデックス引数を渡すことを検討しています。 int[]としてですが、少しugいです。

78
fred basset

Apache Commonsライブラリのorg.Apache.commons.lang.mutable.MutableIntを使用してみてください。言語自体でこれを行う直接的な方法はありません。

71
doublep

これはJavaでは不可能です。提案した1つの方法は、int[]を渡すことです。もう1つは、小さなクラスを持つことです。 IntHolderをラップしたint

20
mikej

Javaでは参照渡しで引数を渡すことはできません。

できることは、整数値を可変オブジェクトにラップすることです。 Apache CommonsのMutableIntを使用するのが適切なオプションです。もう少し難解な方法は、あなたが提案したようにint[]を使用することです。単一セル配列でintをラップしている理由が不明であるため、使用しません。

Java.lang.Integerは不変であることに注意してください。

16
Yuval Adam

バイトバッファーをラップし、インデックスを ByteBuffer オブジェクトに入れます。 ByteBufferは、buffer + positionの概念をカプセル化し、インデックス化された位置から読み書きできるようにします。

13
John Kugelman

Java.util.concurrent.atomic.AtomicIntegerを使用できます。

12
user3070377

次のように新しいクラスを設計できます。

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;
8
Anoos Sb

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

お役に立てれば。