2014-09-15

【Java】ジェネリックで配列を作る方法

arrays.png

[ 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 実践プログラミング
Cay S. Horstmann
インプレス
売り上げランキング: 17,271

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.