多维长度数组反射java

Mar*_*ior 6 java arrays reflection

如何在java上找到带有反射的多维数组的长度?

Chs*_*y76 13

多维数组没有"长度"这样的东西; 它可能不是矩形的.我猜你在谈论尺寸的数量.你需要迭代地进入它并计算.

public int getDimensionCount(Object array) {
  int count = 0;
  Class arrayClass = array.getClass();
  while ( arrayClass.isArray() ) {
    count++;
    arrayClass = arrayClass.getComponentType();
  }
  return count;
}
Run Code Online (Sandbox Code Playgroud)

  • 你没有,因为while循环检查你 - 如果它是一个数组,该方法将只返回0. (2认同)

rsp*_*rsp 9

Java数组每个实例具有长度,并非同一维度中的所有数组都必须具有等长.也就是说,你可以获得实例的长度.

可以通过名称中的"["数来计算维度,这比降序类型层次更快.以下代码:

        int[][][] ary = {{{0},{1}}};

        Class cls = ary.getClass();

        boolean isAry = cls.isArray();
        String clsName = cls.getName();

        System.out.println("is array=" + isAry);
        System.out.println("name=" + clsName);

        int nrDims = 1 + clsName.lastIndexOf('[');

        System.out.println("nrDims=" + nrDims);

        Object orly = ary;

        for (int n = 0; n < nrDims; n++) {

            int len = Array.getLength(orly);

            System.out.println("dim[" + n + "]=" + len);

            if (0 < len) {
                orly = Array.get(orly, 0);
            }
        }
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

is array=true
name=[[[I
nrDims=3
dim[0]=1
dim[1]=2
dim[2]=1
Run Code Online (Sandbox Code Playgroud)