Dart 有一个final
. 大多数动态语言没有这个概念。
什么是最终的,我用它做什么?
final
变量可以包含任何值,但是一旦分配,最终变量就不能重新分配给任何其他值。
例如:
main() {
final msg = 'hello';
msg = 'not allowed'; // **ERROR**, program won't compile
}
final
也可以用于对象中的实例变量。类的最终字段必须在构造函数主体运行之前设置。final 字段不会为其创建隐式 setter,因为您无法在 final 变量上设置新值。
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
变量。