dart - 冒号:在 Dart 构造函数语法中
问题描述
class X extends Y {
X(int a, int b) : super(a,b);
}
有人可以解释一下冒号的语法含义:
吗?
解决方案
Dart中的这个特性称为“初始化列表”。
它允许您初始化类的字段,进行断言并调用超级构造函数。
这意味着它与构造函数体不同。正如我所说,您只能初始化变量并且只能访问static
成员。您不能调用任何(非静态)方法。
好处是您还可以初始化final
变量,这是在构造函数主体中无法做到的。您还可以访问传递给构造函数的所有参数,而直接在括号中初始化参数时您没有这些参数。
此外,您可以在赋值左侧使用与引用参数的右侧参数同名的类字段。Dart 将自动使用左侧的类字段。
这是一个例子:
class X {
final int number;
X(number) : number = number ?? 0;
}
上面的代码将指定的参数分配给number
字段final
,this.number
如果它是非空的,否则它分配0
。这意味着赋值的左边number
实际上指的是this.number
。现在,您甚至可以做出一个永远不会失败的断言(因此是多余的,但我想解释一下一切是如何协同工作的):
class X {
final int number;
X(number): number = number ?? 0, assert(number != null);
}
了解更多。
推荐阅读
- java - Android片段没有膨胀
- mysql - 多个表上的多个排序字段,无需连接 sql
- reactjs - 尝试使用样式组件时出现 Webpack 错误
- php - 仅当购物车中的每个产品都属于同一类别时才分配 var
- javafx - 如何刷新 JavaFX 中的选择框?
- javascript - 与 Map 一起使用后,Array 过滤器函数的行为发生了变化
- java - 移动应用程序仿真能够连接到在线应用程序服务,但不能在实际设备上运行
- angular - Angular获取选定的让值
- python - 在本地同步 aws s3 存储桶(连同文件夹结构)并仅在新添加的本地文件夹上运行 python 代码
- bootstrap-4 - 外部输入时隐藏的简单表单和引导错误?