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

问题描述

我正在寻找实现以下目标的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);

}

我同意,应该在每个子类中实现工厂方法,这是一点点开销,但这是唯一正确的方法。