Java中的可变维数组?

Java中的可变维数组?,java,arrays,Java,Arrays,有没有更好的方法来实现上述目标?我希望它能够创建任意数量的维度数组,而且…我只会使用平面一维数组和基于维度I和j的索引。如前所述,您不能真正使用这样的数组,因为每个维度需要不同的代码 但是,使用反射创建这样的阵列是可行的: switch (dimensions) { case 1: double[] array = new double[10]; break; case 2: double[][] array = new double[

有没有更好的方法来实现上述目标?我希望它能够创建任意数量的维度数组,而且…

我只会使用平面一维数组和基于维度I和j的索引。

如前所述,您不能真正使用这样的数组,因为每个维度需要不同的代码

但是,使用反射创建这样的阵列是可行的:

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;
}
import java.lang.reflect.Array;
私有类arrayClass(类compClass,整数维){
如果(维度==0){
返回类;
}
int[]dims=新的int[尺寸];
对象虚拟=Array.newInstance(compClass,dims);
返回dummy.getClass();
}
公共对象生成数组(整数维){
类别compType=arrayClass(双级,尺寸-1);
返回Array.newInstance(compType,10);
}

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

我实际上认为需要在那里使用原始数组,而不是在其上编写抽象来创建“任意数量的维度”范式并隐藏实际存储。不过,这可能取决于实际使用模式。+1多维数组并不有用,尤其是在面向对象的语言中,这样就不需要将数组包装到更有意义的数据结构中。只需使用平面阵列并插值索引即可。
 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);
 }