Tor*_*dze 2 generics generic-programming dart flutter
我正在尝试创建一个抽象数据模型,在该模型中我传递数据并键入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)));
}
}
Run Code Online (Sandbox Code Playgroud)
您不能在类型变量上调用静态方法。静态方法必须在编译时已知,并且类型变量的值要到运行时才知道。
您可以使用要调用的方法对类进行参数化:
class DataList<T> {
final bool success;
dynamic data;
T dynamic Function(Object) fromJson;
DataList({
this.success,
List<dynamic> data,
this.fromJson;
}) {
castDataToList(data);
}
factory DataList.fromJson(Map<String, dynamic> json, T fromJson(Object o)) {
return DataList(
success: json['success'],
data: json['data'],
fromJson: fromJson,
);
}
void castDataToList(jsonData) {
this.data = List<T>.from(jsonData.map((x) => fromJson(x)));
}
}
Run Code Online (Sandbox Code Playgroud)
当您要使用Foo具有fromJson静态方法的类型的类时,可以将实例创建为:
var dataList = DataList<Foo>fromJson(someJsonMap, Foo.fromJson);
Run Code Online (Sandbox Code Playgroud)
这会将Foo.fromjson函数传递给类,然后可以在需要时使用它。
| 归档时间: |
|
| 查看次数: |
1025 次 |
| 最近记录: |