简体   繁体   English

多维长度数组反射java

[英]Multi-Dimension length array reflection java

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

There is no such thing as "length" for multi-dimensional array; 多维数组没有“长度”这样的东西; it may not be rectangular. 它可能不是矩形的。 I'm guessing you're talking about the number of dimensions. 我猜你在谈论尺寸的数量。 You need to descend into it iteratively and count. 你需要迭代地进入它并计算。

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

Java arrays have lengths per instance, not all arrays in the same dimension have to have equals lengths. Java数组每个实例具有长度,并非同一维度中的所有数组都必须具有等长。 That said, you can get the lengths of instances in the. 也就是说,你可以获得实例的长度。

Dimensions can be counted by the number of '[' in their name, this is quicker than descending the type hierarchy. 可以通过名称中的“[”数来计算维度,这比降序类型层次更快。 The following code: 以下代码:

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

gives the following output: 给出以下输出:

is array=true
name=[[[I
nrDims=3
dim[0]=1
dim[1]=2
dim[2]=1
Class clazz = Class.forName("ReflectionTest");    
Method m = clazz.getDeclaredMethod("getArray");
Object o1 = m.invoke(o, arg);
int array[][] = (int[][])o1;
System.out.println("Array length: " + array.length);
System.out.println("Array length: " + array[0].length);

使用java.lang.reflect.Array.getLength(obj)

If you like me were trying to get the number of dimensions and the size of them then: 如果你喜欢我试图获得尺寸和尺寸,那么:

private static int[] getDimentionsOf(final Object expectedArray) {
    if (!expectedArray.getClass().isArray()) {
        return new int[0];
    }
    final int dimensionSize = Array.getLength(expectedArray);
    final int[] innerDimensions =
                    (expectedArray.getClass().getComponentType().isArray())
                                    ? getDimentionsOf(Array.get(expectedArray, 0))
                                    : new int[0];
    final int lenghtPlusOne = innerDimensions.length + 1;
    final int[] newDimensions = new int[lenghtPlusOne];
    System.arraycopy(innerDimensions, 0, newDimensions, 1, innerDimensions.length);
    newDimensions[0] = dimensionSize;
    return newDimensions;
} 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM