繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM