如何在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. bash中多维数组的长度
- 6. Java反射 - 多维浮动阵列类
- 7. 爪哇 - 如何通过反射检查数组长度(场类)
- 8. C#反射:如何获取数组值和长度?
- 9. 仅查找第一个维度的长度在一个多维数组
- 10. 如何使用反射来制作多维数组或切片
- 11. 2维数组/矩阵的长度
- 12. 二维数组错误,长度为
- 13. 获得第二维的数组长度
- 14. 多维数组映射函数
- 15. java中的多维数组
- 16. java中的多维数组
- 17. Java的多维数组
- 18. Java多维数组索引
- 19. 填充Java多维数组
- 20. Java:多维数组问题
- 21. Java中的多维数组
- 22. 翻转多维数组java
- 23. 在Java中获取二维数组的长度
- 24. Java中一维数组的平均长度
- 25. 创建一个具有未指定变量行长度的多维数组(Java)
- 26. JSON多维数组到Java多维数组
- 27. java多维数组声明1 * 3维?
- 28. 如何检测javascript中的多维数组长度?
- 29. 如何在php中创建固定长度的多维数组?
- 30. 反射速度有多慢
接近,但仍然必须知道该阵列所具有的“维数”... – 2009-11-19 16:14:33
我明白你的意思了。您可以创建一个可以从该类中调用的方法,该方法将返回维数。如果你不能修改那个班,我不确定。 – amischiefr 2009-11-19 16:23:15