50
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Arrays.asList の罠

Last updated at Posted at 2014-04-28

問題

文字列のリストは、Arrays.asList を使うと次のように初期化できる。

String[] array = {"abc", "def"};
List<String> list = Arrays.asList(array);

しかし、int型の配列を同様に扱おうとすると、怒られる。

// コンパイルエラー
int[] array = {0, 1};
List<Integer> list = Arrays.asList(array);

実際の現場でやるなら、下記のようにするしかないぽい。

int[] array = {0, 1};
List<Integer> list = new ArrayList<Integer>(array.length);
for (int i = 0; i < array.length; i++) {
    list.add(array[i]);
}

何とも悩ましい。

原因

Arrays.asList は、プリミティブ型の配列をリスト化してくれない。
いや、正確にはリスト化はしてくれるものの、プリミティブ型の配列全体を単一の要素として扱うため極めて直感と異なる動作をする。
参照:http://aoking.hatenablog.jp/entry/20110415/1302824606

ということらしい。
ということは、Integerのオブジェクトの配列ならイケるってことか?

Integer[] array = {new Integer(1), new Integer(2)};
List<Integer> list = Arrays.asList(array);

イケた。が、Integer型とか普段使わないしな...
問題の根が深そうなのでひとまずメモ、ということで。

50
39
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?