如何在java上使用反射来查找多维数组的长度?多维长度数组反射java
回答
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);
}
}
给出了下面的输出:
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)
。
但这只给出了该维数组的长度...... – 2009-11-19 16:09:30
多维数组是数组的数组。 getLength将返回一个数组的大小,但现在你知道包含数组的大小。使用从0到找到的长度-1的循环,可以对第一个数组的每个元素应用getLength,并找出其他大小。 – 2009-11-19 16:20:17
有作为“长度”为多维数组没有这样的东西;它可能不是矩形的。我猜你在谈论维度的数量。你需要迭代地下降并计数。
public int getDimensionCount(Object array) {
int count = 0;
Class arrayClass = array.getClass();
while (arrayClass.isArray()) {
count++;
arrayClass = arrayClass.getComponentType();
}
return count;
}
您首先必须检查'Object array'是否是一个数组。 – 2010-09-29 11:49:55
你不这样做,因为while循环检查你 - 如果它是一个数组,那么方法将返回0。 – skeggse 2011-12-01 02:25:57
如果你喜欢我试图让维数和他们的再大小:
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;
}
- 1. 的Java:多维数组的长度
- 2. Java;二维数组长度
- 3. PHP多维数组长度
- 4. 不同长度的二维数组(Java)
- 5. smarty多维数组的长度
- 6. bash中多维数组的长度
- 7. Java反射 - 多维浮动阵列类
- 8. 二维数组长度
- 9. Java多维数组
- 10. Java:多维数组
- 11. Java反射多个参数
- 12. 爪哇 - 如何通过反射检查数组长度(场类)
- 13. C#反射:如何获取数组值和长度?
- 14. 如何使用反射来制作多维数组或切片
- 15. 仅查找第一个维度的长度在一个多维数组
- 16. 获得不同长度的期多维数组的中位数
- 17. 获取二维数组的长度
- 18. 2维数组/矩阵的长度
- 19. 二维数组行/列长度C
- 20. 获得第二维的数组长度
- 21. 获取数组的第二维长度
- 22. 二维数组错误,长度为
- 23. 多维二维数组广度优先搜索Java
- 24. 多维数组映射函数
- 25. 处理空维度的多维数组
- 26. Java中的多维数组
- 27. 填充Java多维数组
- 28. Java动态多维数组
- 29. Java中的多维数组
- 30. 翻转多维数组java
接近,但仍然必须知道该阵列所具有的“维数”... – 2009-11-19 16:14:33
我明白你的意思了。您可以创建一个可以从该类中调用的方法,该方法将返回维数。如果你不能修改那个班,我不确定。 – amischiefr 2009-11-19 16:23:15