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维数组和基于维度i和j的索引。
如前所述,您无法真正使用这样的数组,因为每个维度需要不同的代码。
但是,使用reflection创建这样的数组是可行的:
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); }
然后,您必须使用reflection来访问您的数组,或将其强制转换为Object [](适用于所有维度> 1),然后仅操作第一级。 或者将其提供给需要正确类型数组的方法。