[英]How to specify a data type for a container class in Dart
我正在寻找 dart 语法来实现以下目标,但不知道搜索答案的正确术语是什么。
class BaseClass <T extends MyType> {
List<T> items;
T getFirstItem() => items.first;
}
然后能够像这样子类
class ClassForMyType<MyType> extends BaseClass {
List<MyType> items;
MyType getFirstItem() => items.first;
}
ClassForMyType 将扩展 BaseClass 以便我不必重新实现人为的getFirstItem()
方法。
实际上,我希望能够像这样使用它:
ClassForMyType container = ClassForMyType();
MyType item = Mytype();
container.items.add(item);
List<MyType> itemsFromContainer = container.items;
MyType firstItem = container.getFirstItem();
我试过这样的事情:
BaseClass<T extends MyType> {
List<T> items;
void addItemFromMap(Map map) {
items.add(T.fromMap(map));
}
}
以上在 MyType 上确实存在的 .fromMap() 上失败。 在我访问 MyType 上的其他方法的其他方法中,这些似乎有效,但似乎只有命名构造函数有问题。
我认为唯一可行且看起来相对不错的方法是:
abstract class BaseClass<T extends MyType> {
List<T> items;
// abstract factory method
T itemFromMap(Map map);
void addItemFromMap(Map map) {
items.add(itemFromMap(map));
}
}
class ClassForMyType extends BaseClass<MyType> {
// implementing abstract factory method, delegating call to constructor
MyType itemFromMap(Map map) => MyType.fromMap(map);
}
我同意,你应该在每个子类中实现工厂方法有点开销,但这是唯一正确的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.