推荐答案
在 Dart 中,可以通过在类名后使用尖括号 <T>
来定义泛型类。T
是一个类型参数,可以在类中使用它来表示任意类型。
-- -------------------- ---- ------- ----- ------ - - ------ ---------------- - ---------- - ------ ------ - -
在这个例子中,Box
是一个泛型类,T
是一个类型参数。你可以使用 Box<int>
、Box<String>
等来创建不同类型的 Box
实例。
本题详细解读
1. 泛型类的基本语法
在 Dart 中,泛型类的基本语法是在类名后使用尖括号 <T>
,其中 T
是一个类型参数。这个类型参数可以在类的成员变量、方法参数和返回值中使用。
-- -------------------- ---- ------- ----- ------ - - ------ ---------------- - ---------- - ------ ------ - -
2. 使用泛型类
你可以通过指定具体的类型来实例化泛型类。例如:
void main() { Box<int> intBox = Box<int>(10); Box<String> stringBox = Box<String>("Hello"); print(intBox.getValue()); // 输出: 10 print(stringBox.getValue()); // 输出: Hello }
在这个例子中,Box<int>
和 Box<String>
分别表示存储 int
和 String
类型的 Box
实例。
3. 泛型类的类型推断
Dart 支持类型推断,因此在某些情况下,你可以省略类型参数,Dart 会根据上下文自动推断出类型。
void main() { var intBox = Box(10); // 类型推断为 Box<int> var stringBox = Box("Hello"); // 类型推断为 Box<String> print(intBox.getValue()); // 输出: 10 print(stringBox.getValue()); // 输出: Hello }
4. 泛型类的约束
你可以通过 extends
关键字对泛型类型参数进行约束,限制它可以接受的类型。
-- -------------------- ---- ------- ----- ----------- ------- ---- - - ------ ---------------------- - ---------- - ------ ------ - -
在这个例子中,NumberBox
只能接受 num
类型或其子类型(如 int
和 double
)作为类型参数。
void main() { var intBox = NumberBox<int>(10); var doubleBox = NumberBox<double>(10.5); print(intBox.getValue()); // 输出: 10 print(doubleBox.getValue()); // 输出: 10.5 }
5. 泛型类的多类型参数
Dart 支持多个类型参数的泛型类,只需在尖括号中列出多个类型参数即可。
-- -------------------- ---- ------- ----- ------- -- - - ------ - ------- ---------------- ------------- - ---------- - ------ ------ - - ----------- - ------ ------- - -
在这个例子中,Pair
类有两个类型参数 T
和 U
,分别表示第一个和第二个值的类型。
void main() { var pair = Pair<int, String>(1, "One"); print(pair.getFirst()); // 输出: 1 print(pair.getSecond()); // 输出: One }