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

Dart泛型场景下如何访问类成员?无需强制类型转换的方案

解决方案:通过抽象类/接口约束泛型类型

核心思路是用抽象类定义所有目标类的共享属性,让业务类实现该抽象类,再给泛型方法添加类型约束,这样就能直接访问共享成员,完全不需要强制转换或类型判断。

1. 定义抽象类统一规范共享属性

创建一个抽象类,声明你需要在delete方法中访问的所有属性:

abstract class HasChefInfo {
  String get chefName;
  String get chefImage;
}

2. 让业务类实现抽象类

修改Cart以及其他类似类,实现上述抽象类:

class Cart implements HasChefInfo {
  late String chefName;
  late String chefImage;
  late int subTotal;

  @override
  String get chefName => this.chefName;

  @override
  String get chefImage => this.chefImage;
}

如果还有其他类似类(比如Order),同样实现该抽象类:

class Order implements HasChefInfo {
  late String chefName;
  late String chefImage;
  late String orderId;

  @override
  String get chefName => this.chefName;

  @override
  String get chefImage => this.chefImage;
}

3. 给泛型方法添加类型约束

修改delete方法,约束泛型T必须是HasChefInfo的实现类:

delete<T extends HasChefInfo>(T model) async {
  // 直接访问共享属性,无需任何转换
  print('处理关联厨师:${model.chefName}');
  // 执行你的删除逻辑...
}

方案优势

  • 完全规避强制类型转换和is判断,代码简洁安全
  • 利用Dart的泛型约束让编译器做类型检查,避免运行时错误
  • 符合面向对象设计原则,扩展性强,新增类似类只需实现抽象类即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:43:27