リフレクションで配列の扱い

配列要素の型の取得
Class#getComponentType()


配列のインスタンスの作成
Array#newInstance(componentType, length);


用例↓

public static interface Selecter<T>{
    public boolean select(T element);
}

public static<T> T[] select(T[] array, Selecter<T> selecter){
    
    List<T> result = new ArrayList<T>();
    
    for (T t : array) {
        if(selecter.select(t)){
            result.add(t);
        }
    }
    
    Class<?> componentType = array.getClass().getComponentType();
    Object destArrayInstance = Array.newInstance(componentType, 0);
    return (T[])result.toArray((T[])destArrayInstance);
}

http://d.hatena.ne.jp/muimy/20080119/1200723256
の配列版


ジェネリックスってイレイジャだから、実行時に型取れない(型が分からないからインスタンスが作れない)んですね。
return (T[])result.toArray(new T[0]);
とか書けない。