Dart的基本语法和Java有些类似,但是Dart有些额外的“奇葩”语法,比如常量构造函数。
class Foo {
const Foo(int x);
}
const foo1 = Foo(3);
var foo2 = const Foo(3);
// identical返回两个变量是否引用同一个对象
assert(identical(foo1, foo2));
这样创建出来的foo1和foo2是两个常量,它们指向的是同一个对象。
常量构造函数的好处
编译器会对常量进行优化,如果两个常量的构造函数和参数值都是一样的,编译器会重用已有的常量对象,不会再创建新对象。
常量构造函数的要求
- 要定义常量构造函数,class里所有的字段必须是final的,也就是不能改变的。
- 使用常量构造函数时,传递的参数也必须都是常量。
另外,可以把常量构造函数当成普通构造函数使用,这时构造函数的参数可以不用是常量。