Java中的可变维度数组?

时间:2011-04-14 23:47:05

标签: java arrays

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;
}

有没有办法以更好的方式完成上述工作?我希望它能够创建任意数量的数组,也是......

2 个答案:

答案 0 :(得分:9)

我只会使用平面1维数组和基于维度的索引,i和j。

答案 1 :(得分: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);
 }

然后,您必须使用反射来访问您的数组,或将其强制转换为Object [](适用于所有维度&gt; 1),然后仅操作第一级。或者将它提供给需要正确类型数组的方法。