没有原生的Java功能可以实现这个,因为数组(数组(数组(数组……)))不是语言本身的构造。数组是,但是数组的数组只是对象的数组(可能是数组,也可能不是)。符号
Object[][]
只是为多维数组提供类型安全。
你不能在不循环的情况下计算这个,但是你可以使用反射和递归来解决任意维度的数组。
一种通用的解决方案,性能不是问题,使用递归和
java.lang.reflect.Array
计算任意维数组的所有非数组元素可能看起来像这样:
public static int size(Object object) {
if (!object.getClass().isArray()) {
return 1;
}
int size = 0;
for (int i = 0; i < Array.getLength(object); i++) {
size += size(Array.get(object, i));
}
return size;
}
你可以使用任何对象调用这个函数:
int[][] matrix = {
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 }
};
Object[] array = {
"1",
new String[]{
"2", "3", "4"
},
new int[][] {
{ 5 },
{ 6, 7 },
{ 8, 9, 10 }
}
};
String literal = "literal";
System.out.println(size(matrix));
System.out.println(size(array));
System.out.println(size(literal));
会输出
9
10
1
这不是一种非常优雅的解决方案,但正如
polygenelubricants所说:
“这将会非常重复(但即使是
java.util.Arrays
也非常重复),但在Java中使用数组就是这样。”