Dart语言中的泛型约束允许开发者对泛型类型参数进行限制,以确保它们满足特定的条件。以下是Dart中几种常见的泛型约束类型及其设置默认值的方法:
你可以约束泛型类型必须是某个基础类型的子类。
class Box<T extends num> {
T value;
Box(this.value);
}
在这个例子中,T
必须是 num
类型或其子类(如 int
或 double
)。
你可以约束泛型类型必须实现某个接口。
abstract class Printable {
void print();
}
class Document<T extends Printable> {
T content;
Document(this.content);
void display() {
content.print();
}
}
在这个例子中,T
必须实现 Printable
接口。
你可以对泛型类型设置多个约束。
class MultiConstraint<T extends num & Comparable<T>> {
T value;
MultiConstraint(this.value);
bool isGreaterThan(T other) {
return value.compareTo(other) > 0;
}
}
在这个例子中,T
必须同时是 num
类型和实现了 Comparable
接口。
在Dart中,你可以为泛型类型参数设置默认值,这样在使用泛型类时如果没有指定类型参数,就会使用默认值。
class DefaultBox<T extends num = int> {
T value;
DefaultBox(this.value);
}
在这个例子中,DefaultBox
的泛型类型 T
默认为 int
类型。
以下是一个综合示例,展示了如何使用上述所有概念:
abstract class Printable {
void print();
}
class Text implements Printable {
final String content;
Text(this.content);
@override
void print() {
print(content);
}
}
class Document<T extends Printable = Text> {
T content;
Document(this.content);
void display() {
content.print();
}
}
void main() {
var doc = Document(); // 使用默认类型 Text
doc.content = Text('Hello, World!');
doc.display();
var numBox = Box<int>(); // 指定 int 类型
numBox.value = 42;
}
在这个示例中,Document
类使用了默认类型 Text
,而 Box
类则指定了 int
类型。
通过这些约束和默认值设置,你可以更灵活地使用泛型,同时保持类型安全和代码的可读性。
领取专属 10元无门槛券
手把手带您无忧上云