如何在Dart中为容器类指定数据类型
我正在寻找dart语法来实现以下功能,但不知道搜索答案的正确术语是什么如何在Dart中为容器类指定数据类型,dart,types,subclassing,Dart,Types,Subclassing,我正在寻找dart语法来实现以下功能,但不知道搜索答案的正确术语是什么 类基类{ 清单项目; T getFirstItem()=>items.first; } 然后就可以像这样的子类 class ClassForMyType扩展了基类{ 清单项目; MyType getFirstItem()=>items.first; } 其中ClassForMyType将扩展基类,这样我就不必重新实现精心设计的getFirstItem()方法 实际上,我希望能够像这样使用它: ClassForMyType
类基类{
清单项目;
T getFirstItem()=>items.first;
}
然后就可以像这样的子类
class ClassForMyType扩展了基类{
清单项目;
MyType getFirstItem()=>items.first;
}
其中ClassForMyType将扩展基类,这样我就不必重新实现精心设计的getFirstItem()
方法
实际上,我希望能够像这样使用它:
ClassForMyType容器=ClassForMyType();
MyType项=MyType();
container.items.add(item);
列表项fromcontainer=container.items;
MyType firstItem=container.getFirstItem();
我试过这样的方法:
基类{
清单项目;
void addItemFromMap(地图地图){
添加(T.fromMap(map));
}
}
上述操作在MyType上确实存在的.fromMap()上失败。在我访问MyType上其他方法的其他方法中,这些方法似乎有效,似乎只有指定的构造函数才有问题。我认为唯一有效且看起来相对正常的方法是:
抽象类基类{
清单项目;
//抽象工厂法
T itemFromMap(Map-Map);
void addItemFromMap(地图地图){
items.add(itemFromMap(map));
}
}
类ClassForMyType扩展了基类{
//实现抽象工厂方法,将调用委托给构造函数
MyType itemFromMap(映射映射)=>MyType.fromMap(映射);
}
我同意,您应该在每个子类中实现工厂方法,这会带来一点开销,但这是唯一正确的方法。我认为在Dart中没有方法多态地使用构造函数,就这么简单。事实上,我不确定我所知道的任何语言是否会允许上面的代码。第一部分工作-我只需要用一个类型正确定义子类。对于第二部分,我在这里找到了解决方案:谢谢,这几乎就是我正在做的。根据我在另一个问题上找到的答案,我有一个使用“全球工厂”地图的addItemFromMap。所以要么是每个子类中的工厂,要么就是现在的工厂。我真的很高兴,因为它允许我修剪大量重复的代码,并使界面更加标准化。