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

如何为带泛型函数字段的不可变泛型类实现copyWith方法

解决泛型函数字段的不可变类copyWith实现问题

出现该类型错误的核心原因是:copyWith方法返回Foo实例时未显式指定泛型参数<T, R>,Dart会默认推断为Foo<dynamic, dynamic>,导致传入的bar(类型为R Function(T))无法匹配dynamic Function(dynamic)的参数类型要求。

修正后的完整代码

@immutable
class Foo<T, R> {
  const Foo({
    required this.bar,
  });

  final R Function(T data) bar;

  Foo<T, R> copyWith({
    R Function(T data)? bar,
  }) {
    return Foo<T, R>(
      bar: bar ?? this.bar,
    );
  }
}

关键修改说明

  • 明确copyWith的返回类型为Foo<T, R>,让类型系统知晓返回的是当前类的泛型实例
  • 创建新Foo对象时显式指定<T, R>泛型参数,约束类型推断逻辑,避免默认转为dynamic类型

上述修改后,Dart的类型检查器就能正确识别bar的类型,消除参数类型不匹配的诊断提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:22:32