在java中,如果你想初始化一个静态变量一次,你可以在静态初始化块中这样写代码:
abstract class Dummy {
static final Map<String, object> cache = new HashMap();
static {
cache.add('foo', new Foo());
cache.add('bar', new Bar());
}
}
我想问一下,在Dart中是否有类似的方法?Dart编程的最佳编码实践是什么?
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{};
}
在dart中没有静态初始化块,但是您可以采用其他一些方法。
首先,如果您想要做的只是向映射添加一些项,您可以使用映射字面语法:
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{
'foo': Foo(),
'bar': Bar(),
};
}
如果你只是想通过调用几个方法来初始化一个静态值,你可以使用级联符号..
,对于这个特定的例子,它看起来像这样:
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{}
..['foo'] = Foo()
..['bar'] = Bar();
}
上面是使用级联调用映射实例上的[]=
操作符,但是您可以使用级联调用映射实例上的任何方法。例如,我还可以调用remove方法:
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{}
..['foo'] = Foo()
..['bar'] = Bar()
..remove('foo');
}
如果你需要做一些更复杂的事情,你也可以使用一个立即调用的函数字面() {} ()
。
abstract class Dummy {
static final Map<String, dynamic> cache = () {
final result = <String, dynamic>{};
result['foo'] = Foo();
result['bar'] = Bar();
return result;
} ();
}