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

标签 java arrays multidimensional-array casting

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

我遇到的困难是类型转换。我可以通过调用它的 getClass().getName() 来查找数组维度。并计算 [ - 在那里。

但那怎么投呢?

String[] sa = (String[]) arr;

正在给予
Exception in thread "main" java.lang.ClassCastException: [[Ljava.lang.String; cannot be cast to [Ljava.lang.String;

可以在不使用任何反射的情况下完成此转换吗?

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

TIA。

最佳答案

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

您可以使用 object.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);
    }
}

关于java - 如何在不知道 Java 维数的情况下转换多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57878169/

相关文章:

Java - 是否可以对数组进行子类化?还有更多关于 Java 数组的问题

java - 从 App Engine Java 8 迁移到 Java 11 后,哪些本地开发和单元测试工具运行良好?

Python NumPy : create 2d array of values based on coordinates

javascript - 我想知道学生数组中是否有某个名字,如果有则打印出true,如果没有则打印出false

c# - CSV 到多维数组与 c#

java - 如何从外部类追加 JTextArea?

Java JUnit 测试找不到类

python - 在 python 中包装一个 numpy 数组

python - 如何在 Numpy 中重写双 for 循环以节省执行时间?

python - NumPy 中 random.choice 的多维数组