Я попал сюда с той же проблемой (только некоторые эксперименты, подход "добейся цели").Вот решение, которое, кажется, работает для меня, используя отражение.
Обратите внимание, что оно на 100% не зависит от типа ячеек в массиве (может быть список, карта, что угодно).возможно, немного потрудившись, он также может не зависеть от количества измерений массива, но сегодня я хочу пожарить большую рыбу ...
private static <T> T[][] makeArray(Class<T> componentType, int... dimentions) {
return (T[][]) Array.newInstance(componentType, dimentions);
}
, прилагаемый ниже, является тестовым методом.чтобы сохранить тип массива общего типа, который я должен был сделать здесь.это может быть обработано другим методом упаковки, чтобы клиентский код был красивым и чистым:
@Test
public void testMakeArray() throws Exception {
@SuppressWarnings("unchecked")
List<String>[][] arr = makeArray(List.class, 2, 3);
Assert.assertEquals(2, arr.length);
Assert.assertEquals(3, arr[0].length);
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = Arrays.asList("cell", "r="+i, "c="+j);
System.out.print(arr[i][j] + "\t");
}
System.out.println("");
}
}
он печатает:
[cell, r=0, c=0] [cell, r=0, c=1] [cell, r=0, c=2]
[cell, r=1, c=0] [cell, r=1, c=1] [cell, r=1, c=2]