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

Dart中是否存在类似C#的new()、factory()类型的泛型约束?

Dart 泛型构造函数约束相关解答

Dart 目前没有和 C# 中 new()、factory() 对等的内置泛型约束语法,你无法直接在定义泛型参数时,直接限制该类型必须包含某个构造函数(无论是普通默认构造函数还是工厂构造函数)。

  • Dart 原生的泛型约束仅支持类型继承关系限制,比如你可以写 class SuperDog<T extends Animal> 来要求泛型参数 T 必须是 Animal 的子类,但没有针对构造函数的限制规则。核心原因是 Dart 中的构造函数、静态方法都不属于类型的公开接口,泛型约束只能限制类型的实例成员匹配要求,没法约束静态层面的逻辑。
  • 如果你需要实现类似「通过泛型类型生成对应实例」的需求,通用的替代方案是额外传入一个构造函数回调参数,而非依赖原生泛型约束,示例代码如下:
class SuperDog<T> {
  // 传入实例生成回调
  final T Function() creator;

  SuperDog(this.creator);

  T getInstance() => creator();
}

class Snoopy {
  factory Snoopy() {
    return Snoopy._internal();
  }

  Snoopy._internal();
}

void main() {
  // 使用时传递对应构造函数即可
  final superDog = SuperDog<Snoopy>(() => Snoopy());
  final snoopy = superDog.getInstance();
}

这种方案的灵活性比 C# 的构造函数约束更高,你不仅可以传递无参默认构造函数,还可以传递带参数的构造函数、甚至自定义的实例生成逻辑,可适配的场景更多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:08