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

如何在Dart中创建仅支持两种类型的列表(类似TypeScript)

实现支持两种类型元素的列表方案

1. Java 实现方式

Java没有原生联合类型,但可以通过类型安全的自定义方案实现需求:

方式一:自定义标记接口(强类型安全)

先定义一个标记接口,让目标类型(包括包装后的String)实现它:

// 标记接口,仅用于约束类型
interface StringOrClassType {}

// 包装String类,因为String是final无法直接实现自定义接口
class StringWrapper implements StringOrClassType {
    private final String value;
    public StringWrapper(String value) { this.value = value; }
    public String getValue() { return value; }
}

// 让自定义ClassType实现标记接口
class ClassType implements StringOrClassType {
    // 你的类业务逻辑
}

// 使用约束后的列表
List<StringOrClassType> mixedList = new ArrayList<>();
mixedList.add(new StringWrapper("示例文本"));
mixedList.add(new ClassType());

这种写法能严格限制列表元素类型,但存取String时需要通过包装类转换。

方式二:泛型通配符(弱类型约束,适合只读场景)

如果只需要兼容两种类型的读取操作,可借助共同父类,但无法限制其他子类混入:

// 前提是ClassType实现Serializable接口
List<? extends Serializable> mixedList = new ArrayList<>();
mixedList.add("示例文本");
mixedList.add(new ClassType());

此方式灵活性差,类型安全性不足,仅适合简单场景。

2. Python 实现方式

Python 3.10+支持直接用|语法定义联合类型列表,完全贴合你想要的TypeScript风格:

from typing import List

# Python 3.10+ 写法
mixed_list: List[str | ClassType] = []
mixed_list.append("示例文本")
mixed_list.append(ClassType())

# 旧版本兼容写法(需导入Union)
from typing import Union
mixed_list: List[Union[str, ClassType]] = []

配合mypy等静态检查工具,能在编码阶段校验元素类型。

3. C# 实现方式

C# 8.0+支持原生联合类型,写法简洁且编译时强校验:

List<string | ClassType> mixedList = new List<string | ClassType>();
mixedList.Add("示例文本");
mixedList.Add(new ClassType());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:20:28