首页
学习
活动
专区
工具
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 类型。

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

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

相关·内容

XGBoost中的参数介绍

在运行XGBoost之前,必须设置三种类型的参数:通用参数、提升器参数和学习任务参数。 通用参数与要使用的提升器有关,通常是树或线性模型 提升器参数取决于选择的提升器 学习任务参数决定学习场景。...通用参数 booster [default=gbtree] 选择使用的提升器。...范围: [0,∞] max_delta_step [默认值=0] 允许每个叶子输出的最大 delta 步长。如果该值设置为 0,则表示没有约束。如果设置为正值,它可以帮助使更新步骤更为保守。...monotone_constraints 变量单调性的约束 interaction_constraints 表示允许的交互关系的交互约束。...Dart Booster 的附加参数 (booster=dart) 使用 DART booster 进行预测 如果 booster 对象是 DART 类型,predict() 将执行 dropout 操作

25510

Dart 服务端开发 shelf_bind 包

如果您刚开始,我建议首先查看mojito并使用此README作为有关处理程序绑定的更多详细信息。...Uri 如果您想要支持新类型,请提交功能请求(或pull请求) 可选的命名参数 您也可以使用带有默认值的可选命名参数。...默认情况下,shelf_bind尝试确定请求内容类型的编码,如下所示: 如果没有,则假定body为JSON 如果设置了content-type并且是FORM或JSON,那么它将作为该类型处理 如果是任何其他内容类型...例如,如果对http://localhost/person进行POST并且名称为fred,则该位置将设置为 location: http://localhost/person/fred 与Shelf Route...一并使用 shelf_bind的主要用途之一是使用像shelf_route这样的路由器。

1.4K20
  • 【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 )

    文章目录 一、Dart 泛型类与泛型方法 二、Dart 泛型中的特定类型约束 三、Dart 自带泛型 四、完整代码示例 五、 相关资源 一、Dart 泛型类与泛型方法 ---- 泛型作用 : 为 类 ,...> cache2 = Cache(); // 调用泛型方法时 , 传入的参数必须符合对应的泛型类型 // 泛型约束 : 泛型使用时会进行类型检查约束 , 如果设置错误的类型 , 编译时报错...泛型测试, 类型整型, 获取的缓存内容为 18 二、Dart 泛型中的特定类型约束 ---- 泛型还可以进行特定类型约束 , 如指定该泛型类型必须是某个类的子类 , 使用 约束 : 泛型使用时会进行类型检查约束 , 如果设置错误的类型 , 编译时报错 cache.setCacheItem("name", "Tom"); // 获取缓存内容...泛型约束 : 泛型使用时会进行类型检查约束 , 如果设置错误的类型 , 编译时报错 cache2.setCacheItem("age", 18); // 获取缓存内容 int

    5.4K00

    (译)Dart2.12版本发布,可靠的空安全,dart:ffi正式投入生产

    可靠的空安全性使类型系统更加强大,并实现了更好的性能。Dart FFI使您可以使用现有的C库以实现更好的可移植性,并可以选择对性能要求很高的任务使用经过高度调整的C代码。...使用protobuf的代码中最经常出现此问题,其中可选字段在未设置时返回默认值,并且永远不会为null。如此一来,通过混淆默认值和空值,代码错误地检查了默认条件。...6.Dart生态系统的零安全迁移状况 在过去的一年中,我们提供了几种声音无效安全性的预览版和Beta版,目的是为生态系统植入支持无效性安全的软件包。...11.API变更 为了声明FFI稳定并支持上述功能,我们进行了一些较小的API更改。 现在禁止创建空结构(打破更改#44622),并产生弃用警告。您可以使用新的类型Opaque来表示空结构。...通用元数据注释(#1297):扩展元数据注释以也支持包含类型参数的注释。

    2.7K20

    (译)Dart 2.13 类型别名、改进FFI、优化性能、Docker镜像支持

    这篇文章提供了2.12中引入的null安全功能的更新,讨论了2.13的新功能,有关Docker和Google Cloud对Dart后端的支持的一些令人振奋的消息,并预览了您可能期望在未来版本中看到的一些更改...例如,以下代码定义类型别名,以描述包含通用类型的键和type的X值的映射List。通过为类型赋予一个带有单个类型参数的名称,映射的规则结构对代码阅读者来说变得更加明显。...要启用它,请将pubspec.yaml中较低的Dart SDK约束设置为至少2.13: environment: sdk: ">=2.13.0 <3.0.0" 由于语言版本控制,此功能向后兼容。...即使在2.13之前的程序包无法定义自己的类型别名,在2.13下具有较低SDK约束的程序包也可以安全地引用2.13程序包中定义的类型别名。...考虑一个具有内联数组的C结构,如下所示: struct MyStruct { uint8_t arr [8]; } 现在,您可以将其直接包装在Dart中,并使用类型参数指定元素类型Array:

    2K20

    Dart 变量

    这是一个创建变量并对其进行初始化的示例:var name = 'Bob';变量存储引用。名为 name 的变量包含对值为“Bob”的 String 对象的引用。...空安全Dart 语言强制执行健全的空安全。空安全可防止因无意访问设置为 null 的变量而导致的错误。此错误称为空解引用错误。...Dart 不会为不可空类型设置初始值。它强制您设置初始值。Dart 不允许您观察未初始化的变量。...默认值具有可空类型的未初始化变量的初始值为 null 。即使是具有数字类型的变量最初也是 null,因为数字(就像 Dart 中的所有其他内容一样)都是对象。int?...当您将变量标记为 late 但在其声明处对其进行初始化时,则在第一次使用该变量时运行初始化程序。这种延迟初始化在以下几种情况下非常方便:可能不需要该变量,并且初始化该变量的成本很高。

    6400

    第九十八期:Flutter学习(一)

    端的库 跨平台的继承库 加密 文件操作 ...等等 组件其实还好,因为前端的组件这个概念其实都是通用的。...根据布局约束的不同,字符串可能会跨多行中断,也可能全部显示在同一行上。 style参数是可选的。省略时,文本将使用最接近的封闭式DefaultTextStyle中的样式。...inherit属性为true(默认值),给定样式将与最近的封闭DefaultTextStyle合并。这种合并行为非常有用,例如,在使用默认字体系列和大小时,可以将文本加粗。...baseline:100, baselineType:TextBaselIST.alphabetic, child:MyText() ) ConstrainedBox 组件 对其子级施加附加约束的小部件...最好也看一遍dart语言的官网,了解dart的基本类型,变量定义,函数定义,条件语句等基本操作。

    52620

    第117期:Dart的基本知识(变量的声明)

    尽管Dart是强类型的,但类型注释是可选的,因为Dart可以推断类型。在上面的代码中,number被推断为int类型。 如果启用null安全,变量不能包含null,除非我们说可以。...当我们想指定所有的类型都可以时,我们可以使用Object? Dart支持泛型类型,如List<int>(整数列表)或List<Object>(任何类型的对象列表)。...变量 变量存储的是引用。 var name = 'Bob'; 变量name包含了一个对值为bob的string 对象的引用。 变量的默认值 未初始化的变量,包含了一个初始值为null的值。...通常,Dart的控制流分析可以在使用不可为空的变量之前检测其何时设置为非空值,但有时分析会失败。两种常见的情况是顶级变量和实例变量:Dart通常无法确定它们是否已设置,因此它不会尝试。...在声明变量时,将值设置为编译时常量,例如数字或字符串文字、常量变量或对常量进行算术运算的结果: const bar = 1000000; // Unit of pressure (dynes/cm2)

    94420

    35分钟教你学dart(第二节)

    这意味着在运行程序时变量可以保存不同类型的数据。编译代码时不需要知道类型。 单击myAge编辑器窗口并查看文档面板。你会看到 Dart推断出它myAge是一个,int因为它是用整数值35初始化的。...Dart for 循环 Collections 集合对于对相关数据进行分组很有用。Dart 包括几种不同类型的集合,但本教程将介绍两种最常见的:List和Map....您传递给函数的参数决定了bool. 对于任何给定的输入,此函数将始终返回相同的值类型。如果函数不需要返回值,您可以将返回类型设置为void. main例如,这样做。...您可以不使用默认值的参数。...您现在应该对学习如何构建 Flutter 应用程序时看到的 Dart 代码有了更好的理解!

    13.1K30

    你的Flutter应用该考虑迁移代码了:Dart 3将在2023年成为100%健全的空安全语言

    从 2.12 版本开始,Dart 逐渐获得了健全的 null 安全性支持——一种防止对被设定为 null 的变量进行错误访问的方式。...来自谷歌的编程语言 Dart 是一种面向对象、带垃圾收集的类 C 语言。维基百科的定义是:“Dart 是谷歌开发的一种通用编程语言,后被 Ecma 认定为标准(ECMA-408)。...如果没有健全的 null 安全,由 2.12 或更早版本生成的带有 SDK 约束设置的 pubspec 文件(Dart 包的元数据)将根本无法兼容 Dart 3:“在 Dart 3 中,健全 null...使用 2.12 及更早 SDK 约束版本的 pubspec 文件将无法在 Dart 3 或后续版本中正常解析。...当约束设置为小于 2.12(例如 e.g. // @dart=2.9)时,任何包含语言标记的源代码都将报错。”

    1.2K20

    Flutter Lesson 2: Dart 语法简单介绍

    这个需要注意,这个和JavaScript中的变量还是有很大的差别的 虽然Dart是强类型语言,但变量类型是可选的因为Dart可以自动推断变量类型 Dart支持顶层方法(如main方法),也支持类方法或对象方法...默认值 如果你在定义了一个变量以后,同时并没有对其进行赋值,那么,这个变量最终的类型会是null(注意不是undefined)。...Dart中内置了以下几种类型 Number String Boolean List ( means array ) Map Rune ( 用于在字符串中表示 Unicode 字符 ) Symbol...'XXX' ..width = '100' ..height = '100' 流程控制 Dart中的流程控制与前端中的流程控制是一样的,也就以下几种 if and if...else...:deferred/hello.dart' deferred as hello; 异步支持 Dart支持ES7的 async await 方法 下面的代码使用Dart从网络获取数据并打印出来

    1.9K20

    《深入浅出Dart》空安全

    现代JavaScript高级小册 深入浅出Dart 现代TypeScript高级小册 空安全 更强的类型系统,更少的错误 近些年来,编程语言的类型安全性已经成为软件开发社区的一个主要焦点。...由于这样的错误通常在运行时才会被检测到,所以它们通常很难发现和修复。 空安全通过在类型系统级别防止这种错误的发生。Dart 的空安全类型系统区分了可空类型和非空类型。...使用Dart空安全主要涉及到两个方面:理解可空和非空类型,以及如何处理可能为空的值。 可空和非空类型 在空安全中,所有类型默认都是非空的。...nullableString = null; // 可空类型 处理可空值 当你处理一个可能为空的值时,Dart 提供了几种方式来帮助你。例如,你可以使用 ??...操作符来提供一个默认值,当变量为空时,将会使用这个默认值。 String?

    25611

    Flutter 多引擎渲染,在稿定 App 的实践(二):原理篇

    (dart 说实话也不是一个好的开发语言 ...)。 基于这个前提能选择的很少,Flutter 多引擎是实现跨端 UI 现在是最现实的方案而已。...、type(类型)、note(注释)、default(默认值) }> methods 提供对外方法 → List cb_methods...currentLocale; /// 「通用」屏幕宽度(pt) double? screenWidth; /// 「通用」屏幕高度(pt) double?...所以调用基类的作用是进一步封装 pigeon 的 api.dart,让开发者无感知是一个对 App 的组件,只要调用/实现 base.dart 的方法,就可以做到独立调用以及给 add_to_app 调用...image.png 如上图所示, 基类对 on 属性的 set / get 重写,在设置上,如果是独立使用,那会走 widget.fUpdateOn(on) 方法,如果是 add_to_app 的方式,

    1.7K20

    【译】Flutter架构综述

    (context); of(context)调用接收构建上下文(当前小组件位置的句柄),并返回树中与StudentState类型匹配的最近的祖先。...父对象可以通过将最大和最小约束设置为相同的值来决定子对象的大小。例如,手机应用中最上面的渲染对象将其子对象约束为屏幕的大小。(子对象可以选择如何使用该空间。...通过使用 LayoutBuilder 小组件,子对象可以检查传递下来的约束条件,并使用这些约束条件来决定如何使用这些约束条件,例如。...通过创建一个通用通道(封装名称和编解码器),你可以在Dart和用Kotlin或Swift等语言编写的平台组件之间发送和接收消息。...相反,Dart运行时提供了在由Dart对象支持的堆上分配内存的能力,并对静态或动态链接的库进行调用。FFI适用于除web以外的所有平台,在这些平台上,js包具有同等的作用。

    5.6K10

    BI-SQL丨Drop & Alter

    在PowerBI中,如果我们针对某些数据清洗操作进行修改的话,只需要打开高级编辑器查看M语言,对特定的语句进行修改删除就可以了。...SQL Servers的定位,属于国际通用的基础数据库语言之一,本身的定位就是大型的数据仓库。在数据治理的规范化标准中,其中就要求数据仓库必须能够稳定、持续的提供数据源。...补充 之前白茶分享过关于约束的几种类型,其实当时还有额外的Drop和Alter操作的,考量到分类问题,白茶决定放在本期去说。...撤销检查约束: ALTER TABLE 表名称 DROP CONSTRAINT chk_约束名 DEFAULT(默认值)更新: 新增默认值约束: ALTER TABLE 表名称 ALTER COLUMN...列名称 SET DEFAULT '默认值' 撤销默认值约束: ALTER TABLE 表名称 ALTER COLUMN 列名称 DROP DEFAULT [strip] 本期到这里就结束了,没有使用的案例

    70220
    领券