0Pricing
Dart Academy · 课时

泛型类和泛型方法

为您自己的类型设置参数

泛型类和泛型方法 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。

创建您自己的泛型

List 这样的内置类型是泛型,您也可以编写自己的泛型。类型参数能让您的类适应调用者所选择的任意类型。🧩

命名类型参数

您可以在类名后的尖括号中添加类型参数。字母 T 是常见的占位符,用来代表实际类型。

class Box<T> {
  T value;
  Box(this.value);
}

在内部使用 T

在类的内部,T的行为就像任何类型名称一样。您可以在整个类体中将它用于字段、参数和返回值。

class Box<T> {
  T value;
  Box(this.value);
  T get() => value;
}

填入具体类型

创建对象时,您可以选择实际类型。在这里,T会变成 int,因此这个 Box 只会存放整数。

var b = Box<int>(42);
int n = b.get();

让 Dart 自动推断

通常,您可以省略显式类型,因为 Dart 会从参数中读取它。类型推断看到 String 后,就会替您设置 T。

var b = Box('hi');

多个类型参数

一个类可以接收多个类型参数,参数之间用逗号分隔。存放两种不同类型的 Pair 就是一个经典示例。

class Pair<A, B> {
  A first;
  B second;
  Pair(this.first, this.second);
}

泛型方法

您也可以让单个方法成为泛型方法,即使它位于非泛型类中。请将类型参数放在参数列表之前。

T firstOf<T>(List<T> items) => items[0];

方法也能自动推断

泛型方法通常会根据您传入的参数推断类型。像平常一样调用它,Dart 会推断出其余内容。

var n = firstOf([1, 2, 3]);
var s = firstOf(['a', 'b']);

类型安全回归

由于该方法会跟踪T,结果会保留正确的类型。对 String 列表调用 firstOf 会返回 String,无需进行类型转换。

String x = firstOf(['a', 'b']);

可复用而非重复编写

一个泛型定义可以替代许多复制粘贴的版本。您只需编写一次逻辑,它就能同样服务于 int、String 和任何自定义类型。

选择清晰的名称

像 T、E 或 K 这样的单字母名称很常见,但描述性更强的名称可能更有帮助。在复杂代码中,清晰度比简洁更重要。

快速检查

类的类型参数应该放在哪里?

回顾

您学会了将类似 T 的类型参数添加到自己的类和方法中。Dart 通常会通过类型推断填入它,从而让代码既可复用又安全。✅

常见问题解答

「泛型类和泛型方法」课时是免费的吗?

是的 — 「泛型类和泛型方法」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。

「泛型类和泛型方法」这节课中我会学到什么?

为您自己的类型设置参数 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Dart Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「泛型类和泛型方法」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Dart Academy 课中编写并运行代码吗?

能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么泛型胜过 dynamic
  2. 泛型类和泛型方法
  3. 使用 extends 限制类型参数
  4. 实际使用泛型集合
← 返回 Dart Academy