Flutter 如何在泛型Dart方法中对泛型类型T实施约束? 我想要达到的目标
我试图创建一个泛型Dart方法,该方法采用泛型类型T,其中T必须实现类IModel。但是, 问题 似乎我无法在类型t上设置Flutter 如何在泛型Dart方法中对泛型类型T实施约束? 我想要达到的目标,flutter,generics,dart,Flutter,Generics,Dart,我试图创建一个泛型Dart方法,该方法采用泛型类型T,其中T必须实现类IModel。但是, 问题 似乎我无法在类型t上设置实现约束,只有扩展了。例如{}; 伊莫代尔克隆(){ 返回IModel(); } } WorkControlPlanModel.dart,一个实现IModel的示例: import 'dart:core'; import 'package:knowe_personnelledger_mobile/helpers/DateTimeHelper.dart'; import 'p
实现约束,只有扩展了。例如{};
伊莫代尔克隆(){
返回IModel();
}
}
WorkControlPlanModel.dart,一个实现IModel的示例:
import 'dart:core';
import 'package:knowe_personnelledger_mobile/helpers/DateTimeHelper.dart';
import 'package:knowe_personnelledger_mobile/helpers/StringHelper.dart';
import 'package:knowe_personnelledger_mobile/models/IModel.dart';
class WorkControlPlanModel implements IModel {
String id;
String name;
String companyId;
String projectId;
String description;
DateTime created;
DateTime updated;
WorkControlPlanModel({this.id, this.name, this.description, this.created, this.updated, this.companyId, this.projectId});
factory WorkControlPlanModel.fromJson(Map<String, dynamic> json) {
return WorkControlPlanModel(id: json["id"], name: json["name"], created: DateTime.parse(json["created"]), updated: DateTime.parse(json["updated"]), description: json["description"], companyId: json["companyId"], projectId: json["projectId"]);
}
Map<String, dynamic> toJson() => {
"Id": id,
"Name": name,
"Description": description,
"CompanyId": companyId,
"ProjectId": projectId,
"Created": created.toIso8601String(),
"Updated": updated.toIso8601String()
};
WorkControlPlanModel clone() {
return new WorkControlPlanModel(id: StringHelper.clone(id), companyId: StringHelper.clone(companyId), created: DateTimeHelper.clone(created), updated: DateTimeHelper.clone(updated), name: StringHelper.clone(name), projectId: StringHelper.clone(projectId), description: StringHelper.clone(description));
}
}
导入“dart:core”;
导入“包:knowe_personelledger_mobile/helpers/DateTimeHelper.dart”;
导入“package:knowe_PersonnelEdge_mobile/helpers/StringHelper.dart”;
导入“包:knowe_personneledger_mobile/models/IModel.dart”;
类WorkControlPlanModel实现IModel{
字符串id;
字符串名;
字符串公司ID;
弦投影;
字符串描述;
创建日期时间;
更新日期时间;
WorkControlPlanModel({this.id,this.name,this.description,this.created,this.updated,this.companyId,this.projectId});
factory WorkControlPlanModel.fromJson(映射json){
返回WorkControlPlanModel(id:json[“id”]、name:json[“name”]、created:DateTime.parse(json[“created”]、updated:DateTime.parse(json[“updated”]、description:json[“description”]、companyId:json[“companyId”]、projectId:json[“projectId”]);
}
映射到JSON()=>{
“Id”:Id,
“姓名”:姓名,
“描述”:描述,
“公司ID”:公司ID,
“projectd”:projectd,
“已创建”:已创建.toiso8601字符串(),
“更新”:Updated.toiso8601字符串()
};
WorkControlPlanModel克隆(){
返回新的WorkControlPlanModel(id:StringHelper.clone(id),companyId:StringHelper.clone(companyId),created:DateTimeHelper.clone(created),Update:DateTimeHelper.clone(Update),name:StringHelper.clone(name),projectId:StringHelper.clone(projectId),description:StringHelper.clone(description));
}
}
ModelHelper.dart与泛型方法:
import 'dart:convert';
import 'package:knowe_personnelledger_mobile/models/IModel.dart';
// 'T implements IModel' not working, but 'T extends IModel' does as constraint.
abstract class ModelHelper {
static List<T> listFromJson<T implements IModel>(String json) {
List l = jsonDecode(json)["data"];
var models = l.map((m) => T.fromJson(m)).toList();
return models;
}
}
导入'dart:convert';
导入“包:knowe_personneledger_mobile/models/IModel.dart”;
//“T实现IModel”不起作用,但“T扩展IModel”作为约束起作用。
抽象类ModelHelper{
静态列表listFromJson(字符串json){
列表l=jsonDecode(json)[“数据”];
var models=l.map((m)=>T.fromJson(m)).toList();
收益模型;
}
}
补充问题/结论
Dart中是否不支持实施
约束?所有T类都必须扩展IModel吗
问题
似乎我不能在类型t上设置implements约束,只有一个扩展。例如
问题
似乎我不能在类型t上设置implements约束,只有一个扩展。例如
import 'dart:convert';
import 'package:knowe_personnelledger_mobile/models/IModel.dart';
// 'T implements IModel' not working, but 'T extends IModel' does as constraint.
abstract class ModelHelper {
static List<T> listFromJson<T implements IModel>(String json) {
List l = jsonDecode(json)["data"];
var models = l.map((m) => T.fromJson(m)).toList();
return models;
}
}