首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Dart对几种类型的通用约束并设置默认值

Dart语言中的泛型约束允许开发者对泛型类型参数进行限制,以确保它们满足特定的条件。以下是Dart中几种常见的泛型约束类型及其设置默认值的方法:

1. 基础类型约束

你可以约束泛型类型必须是某个基础类型的子类。

代码语言:txt
复制
class Box<T extends num> {
  T value;

  Box(this.value);
}

在这个例子中,T 必须是 num 类型或其子类(如 intdouble)。

2. 接口约束

你可以约束泛型类型必须实现某个接口。

代码语言:txt
复制
abstract class Printable {
  void print();
}

class Document<T extends Printable> {
  T content;

  Document(this.content);

  void display() {
    content.print();
  }
}

在这个例子中,T 必须实现 Printable 接口。

3. 多个约束

你可以对泛型类型设置多个约束。

代码语言:txt
复制
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中,你可以为泛型类型参数设置默认值,这样在使用泛型类时如果没有指定类型参数,就会使用默认值。

代码语言:txt
复制
class DefaultBox<T extends num = int> {
  T value;

  DefaultBox(this.value);
}

在这个例子中,DefaultBox 的泛型类型 T 默认为 int 类型。

应用场景

  • 基础类型约束:当你需要确保泛型类型具有某些基本操作时使用。
  • 接口约束:当你需要泛型类型实现特定行为或方法时使用。
  • 多个约束:当你需要泛型类型满足多个条件时使用。
  • 默认值:当你希望泛型类在大多数情况下使用一个常见的类型时使用。

示例代码

以下是一个综合示例,展示了如何使用上述所有概念:

代码语言:txt
复制
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 类型。

通过这些约束和默认值设置,你可以更灵活地使用泛型,同时保持类型安全和代码的可读性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券