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
相关产品推荐
相关产品推荐

