终极修改器在Dart中做了什么?

时间:2012-09-14 06:14:00

标签: dart

Dart的概念为final。大多数动态语言都没有这个概念。

什么是最终的,我将它用于什么?

1 个答案:

答案 0 :(得分:23)

final变量可以包含任何值,但一旦分配,最终变量就不能重新分配给任何其他值。

例如:

main() {
  final msg = 'hello';
  msg = 'not allowed'; // **ERROR**, program won't compile
}

final也可用于对象中的实例变量。必须在构造函数体运行之前设置类的最后一个字段。 的最终字段将为其创建一个隐式setter,因为您无法在最终变量上设置新值。

class Point {
  final num x, y;
  Point(this.x, this.y);
}

main() {
  var p = new Point(1, 1);
  print(p.x); // 1
  p.x = 2; // WARNING, no such method
}

重要的是要意识到final会影响变量,但不会影响变量指向的对象。也就是说,final不会使变量的对象不可变。

例如:

class Address {
  String city;
  String state;
  Address(this.city, this.state);
}

main() {
  final address = new Address("anytown", "hi");
  address.city = 'waikiki';
  print(address.city); // waikiki
}

在上面的示例中,address变量标记为final,因此它始终指向由new Address("anytown", "hi")构造函数实例化的对象。然而,对象本身具有可变的状态,因此改变城市是完全有效的。 final阻止的唯一事情是重新分配address变量。