Массив переменной размерности в Java?

switch (dimensions) {
    case 1:  double[] array = new double[10];                     break;
    case 2:  double[][] array = new double[10][];                 break;
    case 3:  double[][][] array =  new double[10][][];            break;
    case 4:  double[][][][] array = new double[10][][][];         break;
    case 5:  double[][][][][] array = new double[10][][][][];     break;
    case 6:  double[][][][][][] array = new double[10][][][][][]; break;
    default: System.out.println("Sorry, too many dimensions");    break;
}

Есть ли способ сделать это выше? Я хочу, чтобы он мог создавать массив любого количества измерений, также...

Ответы

Ответ 1

Я бы просто использовал плоские одномерные массивы и индекс, основанный на размерности, я и j.

Ответ 2

Как уже говорилось, вы не можете использовать такой массив, поскольку для каждого измерения вам понадобится другой код.

Создание такого массива выполнимо, однако, используя отражение:

 import java.lang.reflect.Array;

 private Class<?> arrayClass(Class<?> compClass, int dimensions) {
     if(dimensions == 0) {
        return compClass;
     }
     int[] dims = new int[dimensions];
     Object dummy = Array.newInstance(compClass, dims);
     return dummy.getClass();
 }

 public Object makeArray(int dimensions) {
     Class<?> compType = arrayClass(double.class, dimensions-1);
     return Array.newInstance(compType, 10);
 }

Затем вам нужно будет использовать отражение для доступа к вашему массиву или передать его объекту [] (который работает для всех измерений > 1), а затем манипулировать только первым уровнем. Или подайте его методу, который нуждается в правильном типе массива.