"static", "final", "const" 在Dart中意味着完全不同的东西:
"static" 表示成员在类本身上可用,而不是在类的实例上。 这就是它的意思,并没有用于其他地方。 static
修饰成员。
"final" 表示单一赋值:final
变量或字段必须初始化。 一旦赋值,就不能改变final变量的值。 final
修饰变量。
"const" 的含义在Dart中有点复杂和微妙。 const
修饰值,可以在创建集合时使用它,例如const [1,2,3]
,以及构造对象(代替new
),比如const Point(2,3)
。这里,const
意味着对象的整个深度状态可以在编译时完全确定,并且对象将被冻结并完全不可变。
const对象有几个有趣的属性和限制:
- 必须根据可在编译时计算的数据创建它们。
const
对象无法访问运行时需要计算的任何内容。1+2
是一个合法的const
表达式,但new DateTime.now()
不是(合法的const
表达式)。 - 它们是深层不能改变的。 如果你有包含集合的
final
字段,则该集合仍然可变。 如果你有一个const
集合,那么它中的所有东西也必须是递归的const
。 - 它们是规范化的。 这有点像字符串内联:对于任何给定的
const
值,无论const
表达式被计算多少次,都将创建并重用单个const
对象。 也就是说:
getConst() => const [1, 2];
main() {
var a = getConst();
var b = getConst();
print(a === b); // true
}
更多Dart教程