如何为带泛型函数字段的不可变泛型类实现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
相关产品推荐
相关产品推荐

