泛型类和泛型方法
为您自己的类型设置参数
泛型类和泛型方法 是 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 反馈 — 无需本地设置。