我正在尝试创建一个抽象数据模型,我在其中传递数据并键入 a 然后返回列表,但是当我无法调用 T.fromJson()
方法时,请注意传递类型有方法 fromJson()
class DataList<T> {
final bool success;
dynamic data;
InfosResponse({
this.success,
List<dynamic> data,
}) {
castDataToList(data);
}
factory DataList.fromJson(Map<String, dynamic> json) {
return DataList(
success: json['success'],
data: json['data'],
);
}
void castDataToList(jsonData) {
this.data = List<T>.from(jsonData.map((x) => T.fromJson(x)));
}
}
最佳答案
您不能对类型变量调用静态方法。静态方法必须在编译时已知,而类型变量的值直到运行时才知道。
您可以使用您要调用的方法参数化您的类:
class DataList<T> {
final bool success;
dynamic data;
T Function(Object) fromJson;
DataList({
this.success,
List<dynamic> data,
this.fromJson;
}) : data = castDataToList(data);
factory DataList.fromJson(Map<String, dynamic> json, T fromJson(Object o)) {
return DataList(
success: json['success'],
data: json['data'],
fromJson: fromJson,
);
}
List<T> castDataToList(jsonData) =>
[for (var x in jsonData) fromJson(x)];
}
当你想使用一个类型为 Foo
的类时,它有一个 fromJson
静态方法或构造函数,你可以将实例创建为:
var dataList = DataList<Foo>.fromJson(someJsonMap, Foo.fromJson);
这会将 Foo.fromJson
函数传递给类,然后类可以在需要时使用它。
关于generics - Dart,不能调用Generic的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53369276/