2014-09-15
【Java】ジェネリックで配列を作る方法
[ PR ]
今回は、Javaの総称型で配列を作る方法です。
場合によっては素直に作成できますが、今回は一般的な場合を紹介します。
方法
端的にいうと、リフレクションとCollections、そしてArraysを使うのがポイントです。
例えば、同じ値がN個入った配列を作るUnits.units
関数を考えてみると以下のようになります。
import java.util.*;
import java.lang.reflect.Array;
public class Units {
@SuppressWarnings("unchecked")
public static <T> T[] units(int n, T val){
final T[] e = (T[]) Array.newInstance(val.getClass(), n); // -------- (1)
List<T> l = new ArrayList(Collections.emptyList()); // -------- (2)
for (int i=0; i<n; i++) {
l.add(val);
}
return l.toArray(e); // -------- (3)
}
public static void main(String[] args) {
String[] s = units(3,"A");
System.out.println(Arrays.toString(s)); // [A, A, A]
Integer[] i = units(5,1);
System.out.println(Arrays.toString(i)); // [1, 1, 1, 1, 1]
Boolean[] b = units(4,true);
System.out.println(Arrays.toString(b)); // [true, true, true, true]
}
}
ポイントは3つです。
- (1) リフレクションを使って長さNの空配列を作る。
- (2)
Collections.emptyList()
で空のリストを作り、それをArrayListにする。 - (3) 最後に
list.toArray()
を使って配列に変換する。
効率はもっと良く出来ますが、基本的な手順は以上の通りです。
是非試して見て下さい。
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング
posted with amazlet at 14.09.15
Cay S. Horstmann
インプレス
売り上げランキング: 17,271
インプレス
売り上げランキング: 17,271