如何在 Dart 中初始化一个空的 LinkedList<T>?



我正在尝试在飞镖中创建类型为 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对象的容器,这意味着对象本身具有实现链表所需的nextprevious链接。它不是由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.
}}

值得注意的是,您必须指定将添加到链表中的元素类型。您当前正在指定TT不是类,而是表示类的标识符。您需要将其替换为FooEntryClass这是一个您定义为要添加到此列表中的对象类型的类。这个类必须扩展LinkedListEntry这是其他人在说检查文档时得到的。

您的代码最终将如下所示:

var list = LinkedList<FooEntryClass>();

延伸阅读: https://dart.dev/guides/language/language-tour#generics

*FooEntryClass是我编造的任意类名。您需要定义自己的类,并且可以选择所需的任何名称。

相关内容

  • 没有找到相关文章

最新更新