1、const 和 final
1.1 官网的解释
If you never intend to change a variable, use final or const, either instead of var or in addition to a type. A final variable can be set only once; a const variable is a compile-time constant. (Const variables are implicitly final.)
const、 final修饰变量的时候表明改变量只能被修改一次,const为编译时常量,final 为运行常量,
1.2 实例变量只能是final
1.3 const 不仅可以声明变量,还可以用来声明创建常量的构造函数、以及创建常量
var constanEg1 = const []; // 声明常量
final constantEg2 = const []; // final 修饰变量的常量值
constanEg1 = [4, 5, 6]; // 编译通过
constantEg2 = [7]; // 编译无法通过 Error: Constant variables can't be assigned a value.
- 任何变量都有常量值
1.4 关于引用类型的修饰
1.4.1对象示例
void main(List<String> args) {
final p1 = Person(name: 'jeversonjee');
p1.job = 'flutter engineer';
p1.name = 'jeverson';
// var p2 = Person(name: 'jackie');
// p1 = p2;
print('Person 对象 $p1');
}
class Person {
String? name;
String? job;
Person({this.name, this.job});
String toString() {
return '{name: $name, job: $job}';
}
}
// 输出结果
// Person 对象 {name: jeverson, job: flutter engineer}
- 关于
final
修饰的对象, 对象的属性值是可以修改的;对象的引用是不能修改的。 - 上述提到
const
修饰构造函数,那么const 修饰的构造函数是啥样的呢
1.4.2 const 修饰的构造函数
class Point {
final int x;
final int y;
const Point(this.x, this.y);
String toString() {
return '当前坐标为:{x: $x, y: $y}';
}
}
const
修饰的构造函数中,成员变量得用final
修饰- 言归正传想要对象的属性不可变,那么该如何操作呢
void main(List<String> args) {
const point1 = Point(1, 1);
// point1.x = 2; 'x' can't be used as a setter because it's final.
var point2 = Point(0, 0);
// point1 = point2; Constant variables can't be assigned a value.
point2 = point1;
// point2.x = 1; 'x' can't be used as a setter because it's final.
}
- 综上对象属性不可变首先我们得保证,成员变量是final,对象修饰符必须为
const
2、extends、mixin、implement
logs
- 2024/01/03 const 和 final