java - 如何在不知道 Java 维度的情况下转换多维数组
问题描述
有一个多维String
数组作为Object
.
我应该“展开”它并处理它的每个原始条目。除了看Object
它本身之外,没有办法知道尺寸。
我遇到的困难是选角。getClass().getName()
我可以通过调用它并计算[
那里的 -s来查找数组维度。
但那怎么投呢?
String[] sa = (String[]) arr;
正在给
Exception in thread "main" java.lang.ClassCastException: [[Ljava.lang.String; cannot be cast to [Ljava.lang.String;
这种铸造可以在不使用任何反射的情况下完成吗?
注意 - 数组可以是任何维度 - 不仅仅是 1 或 2。
TIA。
解决方案
如果您想使用在编译时未知维度的数组,我建议您递归处理其所有条目,而不是尝试强制转换它。
您可以使用方法检查当前条目是否为数组,然后使用andobject.getClass().isArray()
对其进行迭代:Array.getLength(object)
Array.get(object, i)
public static void main(String[] args) {
Object array = new String[][] {new String[] {"a", "b"}, new String[] {"c", "d"}};
processArray(array, System.out::println);
}
public static void processArray(Object object, Consumer<Object> processor) {
if (object != null && object.getClass().isArray()) {
int length = Array.getLength(object);
for (int i = 0; i < length; i ++) {
Object arrayElement = Array.get(object, i);
processArray(arrayElement, processor);
}
} else {
processor.accept(object);
}
}