2016-02-21 2 views
-1

У меня есть ссылка на тип класса Class<?> общего типа Element, и я хочу создать двумерный массив Element[][], где второе измерение null. Есть ли способ сделать это?Как создать общий многомерный массив в Java?

код я прямо сейчас:

Class<?> type = ... 
int length = ... 
Element[][] array = (Element[][]) Array.newInstance(type, length, 0); 
for (int i=0; i < array.length; i++) 
    array[i] = null; 

Есть ли способ сделать это без петли и дополнительной выделенной памяти?

Edit ----

Второе измерение является нулевым означает, что его просто массив нулевых ссылок на массивы Element. Я делаю это, чтобы я мог динамически распределять длину второго domension так, чтобы массивы не должны были иметь одинаковую длину. Так что я могу сделать что-то вроде этого:

array[0] = (Element[]) Array.newInstance(type, 4); 
array[1] = (Element[]) Array.newInstance(type, 1); 
array[2] = (Element[]) Array.newInstance(type, 3); 
array[3] = null; 
array[4] = null; 
array[5] = (Element[]) Array.newInstance(type, 8); 

и т.д ..

+0

'array [i] = null'? Может быть, вы хотите поместить нуль в каждый элемент 2-го измерения? Что значит «Class »? Ваш вопрос непонятен. – user1803551

+0

Что вы подразумеваете под вторым измерением null? –

+1

'Элемент [] [] array = new Элемент [длина] [];' – user2478398

ответ

2

Попробуйте это.

Class<?> type = ... 
int length = ... 
Class<?> typeOneDimArray = Array.newInstance(type, 0).getClass(); 
Element[][] array = (Element[][])Array.newInstance(typeOneDimArray, length); 

В общем случае, если вы хотите создать N-мерный массив, создайте массив из N-мерного массива.

+0

Это работает, спасибо. По-прежнему кажется странным, что вам нужно создать еще один массив. – nikdeapen

+0

Я думаю, что нет стандартного API для получения класса массива из класса элемента. Поэтому я создаю экземпляр массива и получаю его класс. – saka1029

Смежные вопросы