Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Dart中为容器类指定数据类型_Dart_Types_Subclassing - Fatal编程技术网

如何在Dart中为容器类指定数据类型

如何在Dart中为容器类指定数据类型,dart,types,subclassing,Dart,Types,Subclassing,我正在寻找dart语法来实现以下功能,但不知道搜索答案的正确术语是什么 类基类{ 清单项目; T getFirstItem()=>items.first; } 然后就可以像这样的子类 class ClassForMyType扩展了基类{ 清单项目; MyType getFirstItem()=>items.first; } 其中ClassForMyType将扩展基类,这样我就不必重新实现精心设计的getFirstItem()方法 实际上,我希望能够像这样使用它: ClassForMyType

我正在寻找dart语法来实现以下功能,但不知道搜索答案的正确术语是什么

类基类{
清单项目;
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。所以要么是每个子类中的工厂,要么就是现在的工厂。我真的很高兴,因为它允许我修剪大量重复的代码,并使界面更加标准化。