You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java如何实现类似JavaScript的无限动态嵌套混合类型数组

实现方案

Java是静态类型语言,原生不支持动态混合类型的集合,你可以通过两种常见方案实现无限嵌套的动态数组结构:

方案1:使用List<Object>直接实现

这是最简单的方式,Object是所有引用类型的父类,可同时存储Integer和List类型元素:

import java.util.ArrayList;
import java.util.List;

public class DynamicNestedArray {
    public static void main(String[] args) {
        // 构建 [1, [2, 3, [4, 5, [6, 7]]]] 结构
        List<Object> level3 = new ArrayList<>();
        level3.add(6);
        level3.add(7);

        List<Object> level2 = new ArrayList<>();
        level2.add(4);
        level2.add(5);
        level2.add(level3);

        List<Object> level1 = new ArrayList<>();
        level1.add(2);
        level1.add(3);
        level1.add(level2);

        List<Object> root = new ArrayList<>();
        root.add(1);
        root.add(level1);

        // 遍历示例
        traverseNestedArray(root);
    }

    private static void traverseNestedArray(List<Object> array) {
        for (Object element : array) {
            if (element instanceof Integer) {
                System.out.println(element);
            } else if (element instanceof List) {
                // 强转后递归遍历
                traverseNestedArray((List<Object>) element);
            }
        }
    }
}

注:该方案需要在读取元素时做类型判断和强转,适合简单场景使用。

方案2:自定义嵌套元素类(类型安全实现)

如果你需要更规范的类型安全实现,可以自定义封装嵌套结构的类,避免unchecked类型转换:

import java.util.List;

sealed interface NestedElement permits IntElement, ListElement {
    // 统一遍历方法
    void print();
}

// 存储整数的节点
record IntElement(int value) implements NestedElement {
    @Override
    public void print() {
        System.out.println(value);
    }
}

// 存储嵌套列表的节点
record ListElement(List<NestedElement> children) implements NestedElement {
    @Override
    public void print() {
        children.forEach(NestedElement::print);
    }
}

public class TypeSafeNestedArray {
    public static void main(String[] args) {
        // 构建和JS结构一致的嵌套数组
        NestedElement level3 = new ListElement(List.of(new IntElement(6), new IntElement(7)));
        NestedElement level2 = new ListElement(List.of(new IntElement(4), new IntElement(5), level3));
        NestedElement level1 = new ListElement(List.of(new IntElement(2), new IntElement(3), level2));
        NestedElement root = new ListElement(List.of(new IntElement(1), level1));

        // 遍历
        root.print();
    }
}

注:该方案是类型安全的,编译器会帮你检查类型错误,适合复杂业务场景使用。

内容的提问来源于stack exchange,提问作者Ramana Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:36:02