使用构造函数
对象通过 构造函数 创建。 ClassName 或者 ClassName.identifier是构造函数的名字。
使用 Point 和 Point.fromJson() 构造函数创建 Point 对象如以下代码:
var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});
以下效果相同的代码,构造函数前的 new 关键字是可选的:
var p1 = new Point(2, 2);
var p2 = new Point.fromJson({'x': 1, 'y': 2});
提示:new 关键字在 Dart 2 中变成了可选的。
常量构造函数由一些类提供了。用常量构造函数,在构造函数名前加 const 关键字,来创建编译时常量:
var p = const ImmutablePoint(2, 2);
编译时常量构造两个相同的会产生一个唯一的, 标准的实例:
var a = const ImmutablePoint(1, 1);
var b = const ImmutablePoint(1, 1);
assert(identical(a, b)); // 它们是同一个实例。
在 常量上下文 中, const 在构造函数或者字面量前可以省略。 例如,下面代码创建了一个 const 类型的 map 对象:
// 这里有很多的 const 关键字。
const pointAndLine = const {
'point': const [const ImmutablePoint(0, 0)],
'line': const [const ImmutablePoint(1, 10), const ImmutablePoint(-2, 11)],
};
全部省略只保留第一个 const 关键字:
// 仅有一个 const ,由该 const 建立常量上下文。
const pointAndLine = {
'point': [ImmutablePoint(0, 0)],
'line': [ImmutablePoint(1, 10), ImmutablePoint(-2, 11)],
};
省略了 const 关键字的常量构造函数在常量上下文之外, 此时创建的对象是非常量对象:
var a = const ImmutablePoint(1, 1); // 创建一个常量对象
var b = ImmutablePoint(1, 1); // 创建一个非常量对象
assert(!identical(a, b)); // 两者不是同一个实例!
提示:一个常量上下文中的 const 关键字在 Dart 2 中可以被省略。