avatar

目录
Dart语法学习(8)generics

Dart语法学习系列是自己学习dart的过程笔记

范型

在 API 文档中你会发现基础数组类型 List 的实际类型是 List 。 <…> 符号将 List 标记为 泛型 (或 参数化) 类型。 这种类型具有形式化的参数。 通常情况下,使用一个字母来代表类型参数, 例如 E, T, S, K, 和 V 等。

使用泛型可以减少重复的代码。

dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main() {
var list1 = new List<int>();

list1.add(1);
// 范型限定只能添加整数类型
// list1.add('1');

var utils = new Utils<int>();
utils.put(1);
}

// 类范型
class Utils<T> {
T element;

// 方法范型
void put<T1>(T element) {
this.element = element;
}
}


使用集合字面量

List , Set 和 Map 字面量也是可以参数化的。 参数化字面量和之前的字面量定义类似, 对于 List 或 Set 只需要在声明语句前加 前缀, 对于 Map 只需要在声明语句前加 <keyType, valueType> 前缀

dart
1
2
3
4
5
6
7
var names = <String>['Seth', 'Kathy', 'Lars'];
var uniqueNames = <String>{'Seth', 'Kathy', 'Lars'};
var pages = <String, String>{
'index.html': 'Homepage',
'robots.txt': 'Hints for web robots',
'humans.txt': 'We are people, not machines'
};


使用泛型函数

函数范型 first () 泛型可以在如下地方使用参数 T :

  • 函数的返回值类型 (T)
  • 参数的类型 (List)
  • 局部变量的类型 (T tmp)
dart
1
2
3
4
5
6
T first<T>(List<T> ts) {
// Do some initial work or error checking, then...
T tmp = ts[0];
// Do some additional checking or processing...
return tmp;
}
文章作者: 盛顺炎
文章链接: https://www.shengshunyan.xyz/2020/05/09/Dart%E8%AF%AD%E6%B3%95%E5%AD%A6%E4%B9%A0(8)generics/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 果实的技术分享
打赏
  • 微信
    微信
  • 支付寶
    支付寶

评论