【发布时间】:2020-04-27 21:05:04
【问题描述】:
我们如何在 dart 中创建泛型类型的对象?
对于我的用例,我的每个 api 响应都包装为 ApiResponse 类。对于登录 api 响应,我得到一个 json 对象,例如
{
"data": {
"email": "a@b.com",
"name": "A"
},
"message": "Successful",
"status": true
}
因此,为了解析这些响应,我创建了如下类,但它们抛出编译时错误,指出 方法 'fromJson' 没有为类 'Type' 定义。:
class ApiResponse<T extends BaseResponse> {
bool status;
String message;
T data;
ApiResponse.fromJson(Map<String, dynamic> json) {
status = json['status'];
message = json['message'];
data = T.fromJson(json['data']); // <<<------- here is the compile time error
}
}
abstract class BaseResponse {
BaseResponse.fromJson(Map<String, dynamic> json);
}
class Login extends BaseResponse {
String name, email;
Login.fromJson(Map<String, dynamic> json) : super.fromJson(json) {
name = json['name'];
email = json['email'];
}
}
// and I want to use it like below
usage() {
ApiResponse<Login> a = ApiResponse.fromJson({});
String name = a.data.name;
}
谁能帮我解决这个错误?
【问题讨论】:
-
嗯,通常你不会调用类型的方法,对吧?我想知道您是否打算这样做
data = data.fromJson(json['data']) -
如果我们使用
data = data.fromJson(json['data']):: main.dart:9:17 会出现此错误:错误:未为类“BaseResponse”定义方法“fromJson”。 - 'BaseResponse' 来自'main.dart'。数据 = data.fromJson(json['data']); ^^^^^^^^ 错误:编译失败。 -
@JainamJhaveri 你解决了吗?请通过回答问题来帮助我
-
没能解决这个问题
-
你不能在 Dart 中继承构造函数。您只能继承实例成员。