Dart中 static final const的区别


"static", "final", "const" 在Dart中意味着完全不同的东西:

"static" 表示成员在类本身上可用,而不是在类的实例上。 这就是它的意思,并没有用于其他地方。 static修饰成员。

"final" 表示单一赋值:final变量或字段必须初始化。 一旦赋值,就不能改变final变量的值。 final修饰变量。

"const" 的含义在Dart中有点复杂和微妙。 const修饰值,可以在创建集合时使用它,例如const [1,2,3] ,以及构造对象(代替new),比如const Point(2,3)。这里,const意味着对象的整个深度状态可以在编译时完全确定,并且对象将被冻结并完全不可变。

const对象有几个有趣的属性和限制:

  1. 必须根据可在编译时计算的数据创建它们。 const对象无法访问运行时需要计算的任何内容。 1+2是一个合法的const表达式,但new DateTime.now()不是(合法的const表达式)。
  2. 它们是深层不能改变的。 如果你有包含集合的final字段,则该集合仍然可变。 如果你有一个const集合,那么它中的所有东西也必须是递归的const
  3. 它们是规范化的。 这有点像字符串内联:对于任何给定的const值,无论const表达式被计算多少次,都将创建并重用单个const对象。 也就是说:
getConst() => const [1, 2];
main() {
  var a = getConst();
  var b = getConst();
  print(a === b); // true
}

更多Dart教程