dart 如何初始化一个静态变量并为它设置各种值?

fnatzsnv  于 2023-05-26  发布在  其他
关注(0)|答案(1)|浏览(149)

在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>{};
}
4zcjmb1e

4zcjmb1e1#

dart中没有静态初始化块,但您可以采用其他一些方法。
首先,如果你想做的只是在map中添加一些项目,你可以使用map文字语法:

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

上面是使用cascade在map示例上调用[]=运算符,但是你可以使用cascade在map示例上调用任何方法。例如,我也可以调用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;
  } ();
}

相关问题