#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? Какова лучшая практика кодирования в программировании на дротики?
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{};
}
Ответ №1:
Ну, в 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();
}
Выше описано использование cascade для вызова []=
оператора в экземпляре карты, но вы можете вызвать любой метод в экземпляре карты с помощью cascade. Например, я мог бы также вызвать метод remove:
abstract class Dummy {
static final Map<String, dynamic> cache = <String, dynamic>{}
..['foo'] = Foo()
..['bar'] = Bar()
..remove('foo');
}