Dart冒号背后的原因是什么

时间:2019-09-01 10:08:30

标签: dart

我正在检查一些飞镖代码并查看此代码:

  AppState.fromJson(Map<String, dynamic> json)
      : cartItems = (json['cartItems'] as List)
            .map((i) => new CartItem.fromJson(i as Map<String, dynamic>))
            .toList();

冒号背后的原因是什么?
为什么这与常规任务不同?

1 个答案:

答案 0 :(得分:1)

您可以在飞镖之旅中找到更多信息:https://dart.dev/guides/language/language-tour#classes

  

如果超类没有未命名,无参数的构造函数,则必须手动调用超类中的构造函数之一。在冒号(:)之后,构造函数主体(如果有)之前指定超类构造函数。

     

除了调用超类构造函数外,还可以在构造函数主体运行之前初始化实例变量。用逗号分隔初始化程序。

// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map<String, num> json)
    : x = json['x'],
      y = json['y'] {
  print('In Point.fromJson(): ($x, $y)');
}
  

在开发过程中,您可以通过使用初始化列表中的assert来验证输入。

Point.withAssert(this.x, this.y) : assert(x >= 0) {
  print('In Point.withAssert(): ($x, $y)');
}

您还可以使用它们来初始化最终变量:

class Point {
  final num x;
  final num y;
  final num distanceFromOrigin;

  Point(x, y)
      : x = x,
        y = y,
        distanceFromOrigin = sqrt(x * x + y * y);
}