我刚开始学习飞镖,但我无法理解const构造函数。有人可以说明如何使用const构造函数。
在什么情况下我需要使用它?
答案 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
对象。