4

プリミティブ ラッパー クラスのインスタンスの配列がある場合、それぞれのプリミティブの配列を取得するにはどうすればよいですか?

Object toPrimitiveArray(Object[] wrappedArray) {
    return ?;
}

Object primitiveArray = toPrimitiveArray(new Integer[] { 1, 2, 3 });

上記の例では、値、、およびを含むtoPrimitiveArray()を返したいと思います。int[]int123

4

4 に答える 4

2

問題は、オブジェクトの配列としてのみ定義しており、それ以上の情報がないため、配列に含まれている Number のタイプをメソッドが認識できないことです。したがって、コンパイル時の型の安全性を失わずにプリミティブ配列を自動的に生成することはできません。

リフレクションを使用してオブジェクト タイプを確認できます。

if(obj instanceof Integer) {
    //run through array and cast to int
} else if (obj instanceof Long) {
    //run through array and cast to long
} // and so on . . .

ただし、これは醜く、コンパイラがコードの型安全性をチェックできないため、エラーの可能性が高くなります。

配列の代わりに Number オブジェクトの List を使用するように切り替えていただけますか? 次に、型パラメーター (ジェネリック) を使用して、型の安全性を保証できます。

于 2012-07-15T14:47:44.747 に答える
1

これはどう:

int[] toPrimitiveArray(Integer[] wrappedArray) {
  int[] array = new int[wrappedArray.length];
  for(int i = 0; i < wrappedArray.length; i++)
    array[i] = wrappedArray[i].intValue();
  return array;
}
于 2012-07-15T14:52:20.687 に答える
0

これを試して....

ラップされた配列の各要素を繰り返し処理し、プリミティブ int に変換します

class Test {



     public int[] toPrimitiveArray(Object[] wrappedArray) {

         int i = 0;
         int[] arr = new int[wrappedArray.length];

           for ( Object w : wrappedArray){


               arr [i] = (Integer) w;
                       i++;
           }

            return arr;
        }



        public static void main(String[] args){

            int[] a = new Test().toPrimitiveArray(new Integer[] { 1, 2, 3 });

            for (int b : a){

                System.out.println(b);
            }
        }


    }

編集:

すべての Wrapper 型をそれぞれのプリミティブ型に変換する必要がある場合..

Wrapper タイプを知るために使用する必要がありinstanceof、それをそれぞれのプリミティブに変換します。

于 2012-07-15T14:53:31.590 に答える