Set*_*add 23
final 变量可以包含任何值,但一旦分配,最终变量就不能重新分配给任何其他值.
例如:
main() {
final msg = 'hello';
msg = 'not allowed'; // **ERROR**, program won't compile
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
重要的是要意识到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
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,address变量标记为final,因此它始终指向new Address("anytown", "hi")构造函数实例化的对象.然而,对象本身具有可变的状态,因此改变城市是完全有效的.唯一阻止的final是重新分配address变量.
| 归档时间: |
|
| 查看次数: |
1160 次 |
| 最近记录: |