如何在不知道Java中维度的情况下转换多维数组

xav*_*erz 6 java arrays casting multidimensional-array

有一个多维String数组作为传入Object
我应该“展开”它并处理它的每个原始条目。除了查看Object自身之外,没有其他方法可以知道尺寸。

我遇到的困难在于铸造。我可以通过调用数组维度getClass().getName()并在其中计算[-s 来查找数组维度。

但是那该如何铸造呢?

String[] sa = (String[]) arr;
Run Code Online (Sandbox Code Playgroud)

在给

Exception in thread "main" java.lang.ClassCastException: [[Ljava.lang.String; cannot be cast to [Ljava.lang.String;
Run Code Online (Sandbox Code Playgroud)

可以在不使用反射的情况下进行投射吗?

注意-数组可以是任意维度-不仅可以是1或2。

TIA。

Kir*_*nov 4

如果您想使用在编译时未知维度的数组,我建议您递归处理其所有条目,而不是尝试对其进行强制转换。

您可以使用object.getClass().isArray()方法检查当前条目是否是一个数组,然后使用Array.getLength(object)and对其进行迭代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);
    }
}
Run Code Online (Sandbox Code Playgroud)