在 Dart 中 Object<type> 语法是什么意思?

Dev*_*wal 8 dart flutter

在以下代码示例中,来自flutter docs

class RandomWords extends StatefulWidget {
  @override
  createState() => RandomWordsState();
}

class RandomWordsState extends State<RandomWords> {
  @override
  Widget build(BuildContext context) {
    final wordPair = WordPair.random();
    return Text(wordPair.asPascalCase);
  }
}
Run Code Online (Sandbox Code Playgroud)

State<RandomWords>语法究竟是什么意思?

我知道您可以使用以下语法为集合中包含的对象(例如列表)指定类型 - List <String>

但我无法理解背后的动机State<RandomWords>

此外,如何RandomWordsStateRandomWords声明中引用并RandomWordsRandomWordsState声明中引用?这不应该导致循环引用错误或什么的吗?

我来自像 python 这样的动态类型语言,这对我来说看起来有点奇怪,有人可以指点我正确的地方吗?

Gün*_*uer 3

<RandomWords>是传递给类的泛型类型参数State

班级State看起来像

abstract class State<T extends StatefulWidget> extends Diagnosticable {
Run Code Online (Sandbox Code Playgroud)

并将RandomWords被传递给类型参数,该类型参数具有需要是 的子类的T约束。TStatefulWidget

State还有一个使用类型参数的字段和 getter

  T get widget => _widget;
  T _widget;
Run Code Online (Sandbox Code Playgroud)

这会产生小部件类型的属性,该属性在其子类中提供适当的自动完成和类型检查RandomWordsState

假设你有

class RandomWords extends StatefulWidget {
  RandomWords({this.fixed});

  final WordPair fixed;

  @override
  createState() => RandomWordsState();
}

class RandomWordsState extends State<RandomWords> {
  @override
  Widget build(BuildContext context) {
    // vvvv here we can access `fixed` in a strongly typed manner
    final wordPair = widget.fixed ?? WordPair.random();
    return Text(wordPair.asPascalCase);
  }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅https://www.dartlang.org/guides/language/language-tour#generics

  • 因此,用简单的英语来说,人们会说“RandomWordsState 是 RandomWords 小部件的状态对象”,对吗? (2认同)