Предположим, что мне задан класс объекта и int[]
, описывающий произвольные длины многомерного массива, который я хочу создать (и работать с). До сих пор я решил, что могу использовать java.lang.reflect.Array.newInstance(Class<?> type, int... sizes)
, но в этот момент я застрял. Другими словами,Работа с многомерными динамическими массивами в Java
Class<?> type = float.class; // this varies (I receive this)
int[] sizes = new int[]{ 10, 400, 300 }; // this varies too, it could be e.g. int[]{0} for a scalar
Object o = (Object) java.lang.reflect.Array.newInstance(type, sizes);
После определения Object o
я не знаю, как поступить. Априори, я не знаю, будет ли type
float.class
или каким-либо другим типом (на данный момент я предполагаю, что это базовый тип). Хуже того, int[] sizes
может быть любым.
Чтобы сделать это более конкретной проблемой, как я должен, скажем, установить каждый элемент многомерного массива o
с заданным значением, скажет 5.6
после того как я инстанцировал его с Array.newInstance
?
Может быть, пришло время попробовать что-то динамичное? например ruby, python или javascript :) – Admit
Рад. За исключением того, что это работа с существующим Java API (netCDF) и выполнение большого количества if-elses для учета разных случаев (до 7-мерных массивов чего-либо от шорт до ints до плавающих до двойных строк) может но это будет «грязное» решение. Может быть, это не выглядит аккуратно, но, по крайней мере, это сработает? – jbatista
@dbw В приведенном выше примере у меня был бы способ получить класс объектов в каждом слоте многомерного массива (float.class - это один пример) и массив с длиной каждый из размеров массива. Поэтому в этом случае 'Object o' действительно является' float [10] [400] [300] '- но это может быть что-то еще, например. 'type = String.class; size = new int [] {0} 'будет одной строкой. Надеюсь, это более ясно. – jbatista