Как инициализировать статическую переменную и задать для нее различные значения?

#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');
}