Dart 语言 泛型集合使用示例

Dart阿木 发布于 2025-06-19 9 次阅读


Dart 语言泛型集合使用示例详解

Dart 是 Google 开发的一种面向对象的编程语言,主要用于构建移动、Web 和桌面应用程序。Dart 语言具有丰富的特性和强大的功能,其中泛型是 Dart 语言的一个重要特性。泛型允许开发者编写可重用的代码,同时保持类型安全。本文将围绕 Dart 语言中的泛型集合使用示例进行详细讲解。

一、泛型简介

泛型是一种在编程语言中允许在定义类、接口或方法时使用类型参数的技术。通过泛型,可以创建可重用的代码,同时确保类型安全。在 Dart 中,泛型可以用于集合、类、函数等。

二、泛型集合

在 Dart 中,泛型集合是指使用泛型定义的集合类,如 `List<T>`, `Set<T>`, `Map<K, V>` 等。这些集合类允许存储具有相同类型的元素。

2.1 List<T>

`List<T>` 是 Dart 中最常用的泛型集合之一,它表示一个有序的元素列表。下面是一个使用 `List<T>` 的示例:

dart

void main() {


List<String> names = ['Alice', 'Bob', 'Charlie'];


for (var name in names) {


print(name);


}


}


在这个例子中,`names` 是一个 `List<String>` 类型的变量,它只能存储字符串类型的元素。

2.2 Set<T>

`Set<T>` 是一个无序的元素集合,它不允许重复的元素。下面是一个使用 `Set<T>` 的示例:

dart

void main() {


Set<String> colors = {'red', 'green', 'blue'};


for (var color in colors) {


print(color);


}


}


在这个例子中,`colors` 是一个 `Set<String>` 类型的变量,它只能存储字符串类型的元素,并且不会有重复的元素。

2.3 Map<K, V>

`Map<K, V>` 是一个键值对的集合,其中 `K` 和 `V` 分别代表键和值的类型。下面是一个使用 `Map<K, V>` 的示例:

dart

void main() {


Map<String, int> scores = {'Alice': 90, 'Bob': 85, 'Charlie': 95};


for (var entry in scores.entries) {


print('${entry.key}: ${entry.value}');


}


}


在这个例子中,`scores` 是一个 `Map<String, int>` 类型的变量,它存储了学生的名字和分数。

三、泛型方法

除了泛型集合,Dart 还支持泛型方法。泛型方法允许在方法定义中使用类型参数。

3.1 泛型方法示例

下面是一个使用泛型方法的示例:

dart

void main() {


var list = [1, 2, 3];


print(sum(list));

var set = {'a', 'b', 'c'};


print(sum(set));

var map = {'a': 1, 'b': 2, 'c': 3};


print(sum(map));


}

int sum<T>(T a) {


if (a is List<int>) {


return a.reduce((value, element) => value + element);


} else if (a is Set<int>) {


return a.length;


} else if (a is Map<String, int>) {


return a.values.reduce((value, element) => value + element);


} else {


throw 'Unsupported type';


}


}


在这个例子中,`sum` 方法是一个泛型方法,它接受任何类型的参数 `a`。根据 `a` 的实际类型,`sum` 方法会返回不同的结果。

四、泛型约束

在 Dart 中,可以使用泛型约束来限制类型参数必须实现的接口或继承的类。

4.1 泛型约束示例

下面是一个使用泛型约束的示例:

dart

void main() {


var list = [1, 2, 3];


print(max(list));

var set = {'a', 'b', 'c'};


print(max(set));

var map = {'a': 1, 'b': 2, 'c': 3};


print(max(map));


}

T max<T extends num>(T a, T b) {


return a > b ? a : b;


}


在这个例子中,`max` 方法使用了泛型约束 `T extends num`,这意味着 `T` 必须是 `num` 类型的子类,即 `int` 或 `double`。

五、总结

泛型是 Dart 语言的一个重要特性,它允许开发者编写可重用、类型安全的代码。本文通过泛型集合和泛型方法的示例,展示了 Dart 中泛型的使用。掌握泛型,可以帮助开发者提高代码的可维护性和扩展性。

六、扩展阅读

- [Dart 官方文档 - 泛型](https://dart.dev/guides/language/generics)

- [Dart 泛型进阶](https://dart.dev/guides/language/genericsadvanced-topics)

- [Dart 泛型最佳实践](https://dart.dev/guides/language/genericsbest-practices)

通过阅读这些资料,可以更深入地了解 Dart 泛型的使用和最佳实践。