首页 > 解决方案 > 在Java中使用反射迭代Nd数组的问题

问题描述

好的,所以我想通过反射打印随机 N 维数组中的所有元素。arraysString除了字符串末尾有 N-1 个空数组外,该解决方案效果很好。例如:

private int[] arr = {3, 4, 5};
private int[][] arrs = {{3, 4}, {3, 4, 5}, {3}};

好吧,当我尝试序列化第一个数组时,它将打印 -> [3, 4, 5],但是当我打印第二个时 -> [3, 4][3, 4, 5][3][] 是打印。我很困惑为什么会这样。这是我的功能:

private void serializeToArray(Object array, List<String> arraysAsString) {

    StringBuilder builder = new StringBuilder();
    List<String> arrayOutputs = new ArrayList<>();

    int length = Array.getLength(array);
    builder.append('[');
    for (int i = 0; i < length; i++) {
        Object arrayElement = Array.get(array, i);
        if (isArray(arrayElement)) {
            serializeToArray(arrayElement, arraysAsString);
            continue;
        }
        arrayOutputs.add('"' + arrayElement.toString() + '"');
    }
    builder.append(String.join(",", arrayOutputs));
    builder.append(']');

    arraysAsString.add(builder.toString());
}

是数组->

protected boolean isArray(Object obj){
    return obj.getClass().isArray();
}

标签: javareflection

解决方案


对于 2D 数组输入,当递归调用返回时,您将 String 添加[]到 output List

为了避免这种情况,改变

arraysAsString.add(builder.toString());

if (builder.length () > 2 || length == 0) {
    arraysAsString.add(builder.toString());
}

这将改变输出

[["3","4"], ["3","4","5"], ["3"], []]

[["3","4"], ["3","4","5"], ["3"]]

推荐阅读