美文网首页
Flutter/Dart final与const总结

Flutter/Dart final与const总结

作者: 村口阿成 | 来源:发表于2019-07-18 14:06 被阅读0次

final属于单赋值,使用final修饰的变量必须进行初始化,一旦被赋值以后,不能被再次赋值。

const修饰的变量它会在编译器以至于应用整个生命周期内都是不可变的常量,在内存中也只会创建一次,之后的每次调用都会复用第一次创建的对象。

使用场景:
Widget中创建的各种属性都是用final修饰的,Widget表示一帧, 赋值完成后是不会再变的。
而const可以这样来使用:

  1. 创建集合:
var list = const[1,2,3];

2.构造对象

var point = const Point(4,5);

3.通过基本运算得到常量

const num = 1+2;

但是Datetime除外

const time = DateTime.now();//这样会报错

4.定义常量实体类

class Student {
  final String name;
  const Student(String name) : this.name = name;
}
======
main(){
  var jim = const Student("Jim");
}

这里Student类定义了一个const构造函数,一个类能定义const构造函数的前提是,成员变量必须都用finalconst修饰。

5.const导致的不可变特性是可以传递的。如果又一个final修饰的成员变量,这个成员变量包含了一个集合,那么这个集合仍然是可变的, 但是如果包含的是const修饰的集合,那么集合内所有东西都是递归不可变的。
e.g.

final list0 = [1,2,3];
list0[0] = 4;
print(list0.toString());//打印[4,2,3]
======
var list1 = const[1,2,3];
list1[0] = 4;//这里会报错

扩展:static修饰符也能用来修饰变量, 被它修饰的成员变量,方法是属于类级别的, 并不属于对象。static变量直到运行期使用时才会进行实例化。

相关文章

网友评论

      本文标题:Flutter/Dart final与const总结

      本文链接:https://www.haomeiwen.com/subject/pumklctx.html