>>121
呼び出し側と呼び出されるメソッドだけならそれで解決できるかもしれんが、
メソッド内でT[]を引数か戻り値に使う別のメソッド呼ばれるときはどうやって解決するんだ?

<T> T[] join(T[][] arrays, Class<T> clazz) {
 int size = 0; for (T[] array : arrays) size += array.length;
 T[] retArray = (T[])Array.newInstance(clazz, size);
 size = 0; for (T[] array : arrays) { System.arraycopy(array, 0, retArray, size, array.length); size + = array.length; }
 return retArray;
}

T[] toFlatArray(List<List<T>> l, Class<T> clazz) {
 T[][] arrays = (T[][])Array.newInstance(Array.newInstance(clazz, 0).getClass(), l.size());
 for (int i = 0; i < l.size(); i++) arrays[i] = l.get(i).toArray(Array.newInstance(clazz, l.get(i).size()))
 return join(arrays);
}