我正在尝试在飞镖中创建类型为 T 的链表
var list = LinkedList<T>();
但编辑说
">T"不扩展"LinkedListEntry"。尝试使用或 是"LinkedListEntry"的一个子类。
基本用法示例:
import 'dart:collection';
void main() {
var list = LinkedList<MyEntry>();
list.add(MyEntry(1));
list.add(MyEntry(2));
list.add(MyEntry(3));
print(list);
print(list.last.previous);
list.last.previous.unlink();
print(list);
}
class MyEntry extends LinkedListEntry<MyEntry> {
final int id;
MyEntry(this.id);
@override
String toString() {
return '$id';
}
}
结果:
(1, 2, 3( 2 (1, 3(
Dart平台库中的LinkedList
类不是List
。
它是实现LinkedListEntry
对象的容器,这意味着对象本身具有实现链表所需的next
和previous
链接。它不是由LinkedList
类提供的。
您可以使用LinkedList
来包含任何对象,只需创建一个可以将这些对象放入的帮助程序类,一个实现LinkedListEntry
对象的帮助程序类。例如:
class Entry<T> extends LinkedListEntry<Entry<T>> {
T value;
Entry(this.value);
}
// ...
main() {
var ll = LinkedList<Entry<int>>();
ll.add(Entry(42));
ll.add(Entry(37));
print(ll.first.value); // 42.
}}
值得注意的是,您必须指定将添加到链表中的元素类型。您当前正在指定T
但T
不是类,而是表示类的标识符。您需要将其替换为FooEntryClass
这是一个您定义为要添加到此列表中的对象类型的类。这个类必须扩展LinkedListEntry
这是其他人在说检查文档时得到的。
您的代码最终将如下所示:
var list = LinkedList<FooEntryClass>();
延伸阅读: https://dart.dev/guides/language/language-tour#generics
*FooEntryClass是我编造的任意类名。您需要定义自己的类,并且可以选择所需的任何名称。