Dart - 通过映射构造函数实例化泛型类型

Jef*_*D23 5 dart flutter

您无法在 Dart 中实例化泛型类型,也无法在 Flutter 中使用镜像。但是,您可以类型映射到闭包中的构造函数。

在处理手写类时,这对于 JSON 序列化之类的东西可能很有用,特别是当数据源以多种形式返回相同的数据形状时,即Future<T>Stream<T>.

问题:这是一种有效的模式吗?有任何潜在的缺点吗?更好的选择?

class Dog{}
class Cat{}

Map models = {
    Dog: () => Dog(),
    Cat: () => Cat()
};

class Database<T> {
  T data;
  Database() {
    data = models[T](); // <-- this feels a bit weird, but works
  }
}

void main() {

  Database<Cat> cat = Database();
  print(cat.data is Cat);

}
Run Code Online (Sandbox Code Playgroud)