如您所知,在 Dart 中,我们通过将类型附加在列表或映射前面来指定类型,如下所示。
List<String> listOfStrings = [ ... ];
Map<String, int> listOfInts = { ... };
Run Code Online (Sandbox Code Playgroud)
然后我遇到了这种奇怪的语法,
DropdownButton<String>( ... );
DropdownMenuItem<String>( ... );
Run Code Online (Sandbox Code Playgroud)
这些是小部件构建器,它们是类,对吧?怎么<String>可以贴在那里呢?这意味着什么?
通常在许多编程语言中,有一个称为 的功能Generics,旨在提供类型安全性并轻松支持多种类型,而无需为每个已知类定义方法签名。
Dart 也不例外并且支持Generics. 如果你查看DropdownButton 文档,你可以看到方法签名是这样定义的。
DropdownButton<T> class\nRun Code Online (Sandbox Code Playgroud)\n这意味着任何T类型都可以提供给 DropdownButton,并且它将被“传递”到其他底层方法。在文档中,您可以搜索 的使用T,下面是一些示例。
...\nitems \xe2\x86\x92 List<DropdownMenuItem<T>>?\n...\nonChanged \xe2\x86\x92 ValueChanged<T?>?\nRun Code Online (Sandbox Code Playgroud)\n在上述情况下,T将自动成为您最初使用 DropdownButton< T> 提供的任何内容。
在您的示例中,因为您使用Stringfor T,所以使用的所有底层实例变量或方法也T将使用。String
泛型是一个重要的编程语言概念,您几乎到处都能看到它,因此我建议您阅读有关泛型的 Dart lang 文档。\n https://dart.dev/guides/language/language-tour#generics
\n| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |