问题描述
我正在寻找实现以下目标的dart语法,但不知道搜索答案的正确术语是什么。
ResultConfiguration={
'OutputLocation': s3_output,}
然后能够像这样子类化
class BaseClass <T extends MyType> {
List<T> items;
T getFirstItem() => items.first;
}
ClassForMyType将扩展BaseClass的位置,因此我不必重新实现人为设计的class ClassForMyType<MyType> extends BaseClass {
List<MyType> items;
MyType getFirstItem() => items.first;
}
方法。
有效地,我希望能够像这样使用它:
getFirstItem()
我尝试过这样的事情:
ClassForMyType container = ClassForMyType();
MyType item = Mytype();
container.items.add(item);
List<MyType> itemsFromContainer = container.items;
MyType firstItem = container.getFirstItem();
上面的操作在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);
}
我同意,应该在每个子类中实现工厂方法,这是一点点开销,但这是唯一正确的方法。