gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 04:38:17 26 4
gpt4 key购买 nike

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

}

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

关于dart - 如何在Dart中为容器类指定数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63720376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com