BLOGTIMES
2013/02/07

List<Integer> を toArray() で int[] にしようと思ったら・・・

  java 
このエントリーをはてなブックマークに追加

久しぶりに Java でちょっとしたプログラムを書いたら List と Array の変換ではまったのでメモ。
Java では List と Array の変換は asList()toArray() を使うとシンプルに書けるのはよく知られています。

ExampleApp.java

import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.ArrayUtils; public class ExampleApp { public static void main(String[] args) { List<String> strList = Arrays.asList("Foo", "Bar", "Buzz"); String[] strArray = strList.toArray(new String[strList.size()]); for (String string : strArray) { System.out.println(string); } } }

ところが、このテクニック配列が基本型だと上手くいきません。

ExampleApp2.java

import java.util.Arrays; import java.util.List; import org.apache.commons.lang3.ArrayUtils; public class ExampleApp2 { public static void main(String[] args) { List<Integer> intList = Arrays.asList(1,2,3); int[] intArray = intList.toArray(new int[intList.size()]); // int[] intArray = ArrayUtils.toPrimitive(intList.toArray(new Integer[intList.size()])); for (int i : intArray) { System.out.println(i); } } }

一見、いけそうですがこれは Autoboxing で解決されないので、コンパイルエラーになってしまいます。

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 型 List<Integer> のメソッド toArray(T[]) は引数 (int[]) に適用できません at ExampleApp2.main(ExampleApp2.java:9)

これでは面倒なので簡単に書ける方法がないかどうか探っていたら、結局、Apache Commons Lang にたどりついてしまいました。
上記のコメントになっている部分の toPrimitive()*1 というメソッドを使えばシンプルに実装できます。Javaは基本型と参照型周りは意外とださいところが残ってますからね。。。。


トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5573
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン