如何初始化静态变量并为其设置各种值?

  • 本文关键字:设置 初始化 静态 变量 dart
  • 更新时间 :
  • 英文 :


在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;
} ();
}

最新更新