Dart 语言 泛型类与泛型方法

Dart阿木 发布于 2025-06-18 11 次阅读


Dart 语言中的泛型类与泛型方法:深入探索与实例分析

Dart 是 Google 开发的一种面向对象的编程语言,它被设计用于构建高性能的网络应用。Dart 语言支持泛型编程,这使得开发者能够编写更加灵活和可重用的代码。泛型类和泛型方法允许我们在不指定具体类型的情况下定义类和方法,从而在运行时根据传入的类型参数进行实例化和调用。本文将深入探讨 Dart 中的泛型类与泛型方法,并通过实例代码进行分析。

泛型类

泛型类是 Dart 中的一种特性,它允许我们创建可以处理不同类型数据的类。泛型类通过类型参数来定义,这些参数在实例化时会被具体的类型所替代。

定义泛型类

在 Dart 中,泛型类使用尖括号 `<>` 来定义类型参数。以下是一个简单的泛型类示例:

dart

class Box<T> {


T value;

Box(this.value);

void display() {


print(value);


}


}


在这个例子中,`Box` 类是一个泛型类,它有一个类型参数 `T`。`value` 属性的类型是 `T`,`display` 方法也返回 `T` 类型的值。

实例化泛型类

泛型类可以在实例化时指定具体的类型:

dart

var boxInt = Box<int>(1);


boxInt.display(); // 输出:1

var boxString = Box<String>("Hello");


boxString.display(); // 输出:Hello


如果未指定类型,Dart 会使用 `Object` 类型:

dart

var boxDynamic = Box(123);


boxDynamic.display(); // 输出:123


泛型类的约束

在某些情况下,我们可能需要为泛型类添加类型约束,以确保类型参数满足特定的条件。Dart 支持使用 `extends` 关键字来指定类型约束。

dart

class NumberBox<T extends num> {


T value;

NumberBox(this.value);

void display() {


print(value);


}


}

var boxDouble = NumberBox<double>(3.14);


boxDouble.display(); // 输出:3.14

var boxInt = NumberBox<int>(42);


boxDouble.display(); // 输出:42


在这个例子中,`NumberBox` 类有一个类型约束 `T extends num`,这意味着 `T` 必须是 `num` 类型或其子类型(如 `int`、`double` 等)。

泛型方法

泛型方法与泛型类类似,允许我们在方法中定义类型参数。泛型方法通过在方法签名中添加类型参数来实现。

定义泛型方法

以下是一个泛型方法的示例:

dart

class MyClass {


static <T> void printList(List<T> list) {


for (var i = 0; i < list.length; i++) {


print(list[i]);


}


}


}


在这个例子中,`printList` 方法是一个泛型方法,它接受一个类型为 `List<T>` 的参数 `list`。

调用泛型方法

泛型方法可以在调用时指定具体的类型:

dart

MyClass.printList([1, 2, 3]); // 输出:1 2 3


MyClass.printList(["a", "b", "c"]); // 输出:a b c


如果未指定类型,Dart 会使用 `Object` 类型:

dart

MyClass.printList([true, false]); // 输出:true false


泛型方法的约束

与泛型类类似,泛型方法也可以添加类型约束:

dart

class MyClass {


static <T extends num> void printNumberList(List<T> list) {


for (var i = 0; i < list.length; i++) {


print(list[i]);


}


}


}

MyClass.printNumberList([1, 2, 3]); // 输出:1 2 3


MyClass.printNumberList([1.5, 2.5, 3.5]); // 输出:1.5 2.5 3.5


在这个例子中,`printNumberList` 方法有一个类型约束 `T extends num`,确保传入的列表只包含数字类型。

总结

泛型类和泛型方法是 Dart 语言中强大的特性,它们允许我们编写更加灵活和可重用的代码。通过使用泛型,我们可以避免重复代码,同时确保类型安全。本文通过实例代码展示了 Dart 中泛型类和泛型方法的基本用法,并介绍了类型约束的概念。希望这些内容能够帮助读者更好地理解 Dart 中的泛型编程。