有人可以说明如何使用const构造函数,在什么情况下我需要使用它?

时间:2014-07-23 00:54:42

标签: dart

我刚开始学习飞镖,但我无法理解const构造函数。有人可以说明如何使用const构造函数。

在什么情况下我需要使用它?

2 个答案:

答案 0 :(得分:2)

你偶然发现了克里斯斯特罗姆的post about constant constructors吗? Chris Strom在文章中所做的是对最终字段的解释,但是向下滚动到评论部分,对某个Lasse的常量构造函数进行了很好的澄清。

答案 1 :(得分:1)

Const对象用于注释:

import 'dart:mirrors';

class Foo{
  final name;
  const Foo(this.name);
}
@Foo("Bar")
class Baz{}
void main() {
  ClassMirror cm = reflectClass(Baz);
  print(cm.metadata.first.getField(#name).reflectee); // prints Bar
}

为什么引入const对象(来自开发团队):
 Why does Dart have compile time constants?

他们也可以提供额外的优化。例如,我的dar2js实验:
 Does dart2js optimize const objects better?

一些细节:

class Foo{
  final baz;
  const Foo(this.baz);
}

void main() {
//var foo = const Foo({"a" : 42}); //error {"a" : 42} is a mutable Map
  var foo = const Foo(const {"a" : 42}); //ok
//foo.baz["a"] = 1; //error Cannot set value in unmodifiable Map
  var bar = new Foo({"a" : 42}); //ok
//bar.baz = {"c" : 24}; //error NoSuchMethodError: method not found: 'baz='
  bar.baz["a"] = 1; //ok;
}

如果class只有const构造函数,你仍然可以使用new创建可变对象 final baz是不可变引用。但由于bar是可变的,您可以更改baz对象。