dart - 冒号:Dart构造函数语法

标签 dart flutter

class X extends Y {
  X(int a, int b) : super(a,b);
}

有人可以给我解释冒号:的语法含义吗?

最佳答案

Dart 中的此功能称为“初始化列表”。
它允许您初始化类的字段,进行断言并调用 super 构造函数。

这意味着它与构造函数主体不同。就像我说的,您只能初始化变量,并且仅可以访问static成员。您不能调用任何(非静态)方法。

好处是您还可以初始化 final 变量,而这在构造函数主体中是无法执行的。您还可以访问传递给构造函数的所有参数,而直接在括号中初始化参数时则没有此权限。
此外,您可以在分配的左侧使用类字段,其名称与在引用参数的右侧使用的参数相同。 Dart将自动使用左侧的class字段。
这是一个例子:

class X {
  final int number;

  X(number) : number = number ?? 0;
}

上面的代码将名为number的参数分配给final字段this.number,如果它不是非null,则将其分配给0。这意味着分配的左侧number实际上是指this.number。现在,您甚至可以提出一个永不失败的断言(因此,它是多余的,但是我想解释所有事情如何协同工作):

class X {
  final int number;

  X(number): number = number ?? 0, assert(number != null);
}

Learn more

关于dart - 冒号:Dart构造函数语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60096281/

相关文章:

dart - 错误:找不到 setter/getter : 'defaultType'。 Aqueduct , Dart ,vscode

flutter - 如何获取小部件的位置,以便在加载时定位另一个小部件

ListView 在向上/向下滚动时滞后

flutter - 如何为DropDownMenu添加另一个项目列表,然后在小部件中使用这些项目

dart - 语言上的一些错误

firebase - 如何在 Flutter/Firestore 中执行先进先出系统?

firebase - 如何在 flutter firestore 中获取用户 ID

flutter - 如何将 DrawerHeader 的高度设置为与 AppBar 的高度精确一致

flutter - 堆栈小部件无法作为“列”小部件的子代工作

android - 新的pubspec Flutter插件声明导致MissingPluginException