Если E
является универсальным классом, у нас есть проблема в том, что нельзя создать универсальные массивы без отражения, а в Reflection нам нужен объект класса (или пример объекта массива).
Я не уверен, что это "элегантно", но давайте попробуем:
import java.lang.reflect.Array;
<E> public static E[][] toArray(List<List<E>> list, Class<E> elementType) {
E[] sample = (E[])Array.newInstance(elementType, 0);
List<E[]> tempList = new ArrayList<E[]>(list.size());
for(List<E> subList : list) {
tempList.add( subList.toArray(sample));
}
E[][] finalSample = (E[][])Array.newInstance(sample.getClass(), 0)
return tempList.toArray(finalSample);
}
Может потребоваться @SuppressWarning("unchecked")
для приведений из Array.newInstance.