如您所知,在Dart中,我们通过将类型附加到列表或映射前面来指定类型,如下所示。
List<String> listOfStrings = [ ... ];
Map<String, int> listOfInts = { ... };然后我发现了这个奇怪的语法,
DropdownButton<String>( ... );
DropdownMenuItem<String>( ... );这些是小部件构建器,它们是类,对吗?为什么<String>可以附加在那里?那是什么意思?
发布于 2021-03-29 12:50:12
通常在许多编程语言中,都有一个称为Generics的特性,它旨在提供类型安全性和支持多种类型的简单性,而无需为每个已知的类定义方法签名。
Dart也不例外,它支持Generics。如果您检查DropdownButton documentation,您可以看到方法签名定义如下。
DropdownButton<T> class这意味着任何T类型都可以被提供给DropdownButton,并且它将被“传递”给其他底层方法。在文档中,您可以搜索T的用法,下面是几个示例。
...
items → List<DropdownMenuItem<T>>?
...
onChanged → ValueChanged<T?>?在上述情况下,T将自动成为您最初使用DropdownButton<T>提供的内容。
在您的示例中,因为对T使用String,所以所有使用T的底层实例变量或方法也将使用String。
泛型是一个重要的编程语言概念,您几乎可以在任何地方看到它,因此我建议您阅读有关泛型的Dart lang文档。https://dart.dev/guides/language/language-tour#generics
https://stackoverflow.com/questions/66848833
复制相似问题