Dart:具有 .fromJson 构造函数的泛型

Rut*_*jer 10 generics json dart

在 Swift 中,我习惯于设置 a protocol JSONInitializable,它定义了一个init?(json: JSON)含义,即所有符合协议的类和结构都可以使用 JSON 对象进行初始化。

这在 Dart 中是不可能的(带有abstract class),因为静态方法和工厂初始值设定项不是从抽象类继承的吗?

我问的原因是因为我正在为 API GET 请求编写很多类似的方法,这些方法可以很容易地合并为一个,例如:

static Future<T> get<T extends JSONInitializable>(int id) async {
  final resourceName = T; // TODO: transform to snake case
  final uri = Uri.parse("$kApiHostname/api/$resourceName/$id");

  final response = await _secureGet(uri);
  if (response == null) {
    return null;
  }

  final responseJson = json.decode(response.body);
  final model = T.fromJson(responseJson);

  return model;
}
Run Code Online (Sandbox Code Playgroud)

但是为了让它工作,我需要限制T到定义.fromJson()初始化程序的协议/接口。

Kev*_*ore 1

您想要的功能在 Dart 中不可用(或计划中),但已经有过讨论。

给这个问题点赞:https ://github.com/dart-lang/language/issues/356