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

如何在Dart中创建支持任意合规类的泛型API函数?

实现适配任意规则类的泛型API解决方案

1. 定义约束抽象类

先创建一个抽象类,强制所有适配类实现toDocument实例方法,同时约定fromDocument的构造规范:

abstract class DocumentSerializable {
  Map<String, String> toDocument();
  
  // 可选:用工厂构造器约束结构,子类需实现该工厂方法
  factory DocumentSerializable.fromDocument(Map<String, String> data) => throw UnimplementedError();
}

2. 实现适配类

让所有需要适配的类实现上述抽象类,同时完成fromDocument(静态方法或工厂构造器)和toDocument的实现:

class User implements DocumentSerializable {
  final String name;
  final String id;

  User(this.name, this.id);

  static User fromDocument(Map<String, String> data) {
    return User(data['name']!, data['id']!);
  }

  @override
  Map<String, String> toDocument() {
    return {'name': name, 'id': id};
  }
}

class Product implements DocumentSerializable {
  final String productId;
  final String price;

  Product(this.productId, this.price);

  static Product fromDocument(Map<String, String> data) {
    return Product(data['productId']!, data['price']!);
  }

  @override
  Map<String, String> toDocument() {
    return {'productId': productId, 'price': price};
  }
}

3. 编写泛型上传/获取函数

上传函数(类型安全)

用泛型约束限制参数必须是DocumentSerializable子类,编译时即可校验是否符合规则,避免dynamic的类型风险:

void uploadModel<T extends DocumentSerializable>(T instance) {
  server.upload(instance.toDocument());
}

获取函数(解决静态方法调用问题)

Dart无法直接通过泛型类型参数调用静态方法,因此我们通过传递fromDocument函数作为参数来构建实例:

先定义类型别名简化函数签名:

typedef FromDocument<T> = T Function(Map<String, String> data);

再实现泛型获取函数:

T getModel<T extends DocumentSerializable>(String id, FromDocument<T> fromDocument) {
  Map<String, String> data = server.getData(id);
  return fromDocument(data);
}

4. 使用示例

// 上传实例
final user = User('Alice', 'user_001');
uploadModel(user);

// 获取实例
final fetchedUser = getModel('user_001', User.fromDocument);
final fetchedProduct = getModel('prod_100', Product.fromDocument);

核心优势

  • 类型安全:泛型约束确保只有符合规则的类能被传入,编译阶段即可发现错误
  • 通用性:一套API适配所有实现DocumentSerializable的类
  • 简洁性:调用方式直观,无需额外类型转换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:15:10