Как установить свойства final / const в конструкторе Dart - PullRequest
0 голосов
/ 22 июня 2019

У меня есть класс с неизменным свойством, int id.Как передать значение id в конструктор?

class Hey
{
  var val;
  final int id;
  Hey(int id,var val)
  {
    this.id=id;
    this.val=val;
  }
}

void main()
{
  Hey hey=new Hey(0,1);
}

hey.dart: 10: 10: Ошибка: сеттер не найден: 'id'.this.id = ID;^^ hey.dart: 10: 10: ошибка: установщик 'id' не определен для класса 'Hey'.- «Эй» от «hey.dart».Попробуйте исправить имя в соответствии с именем существующего установщика или определить сеттер или поле с именем 'id'.this.id = ID;^^

Я не думаю, что для свойства const или final требуется установщик.API не ясно, как справиться с этим.

1 Ответ

0 голосов
/ 22 июня 2019

Из Дартского языкового тура :

Примечание: переменные экземпляра могут быть final, но не const.Конечные переменные экземпляра должны быть инициализированы до начала тела конструктора - при объявлении переменной, параметром конструктора или в списке инициализатора конструктора .

И в разделе списков инициализатораговорит:

Помимо вызова конструктора суперкласса, вы также можете инициализировать переменные экземпляра до запуска тела конструктора.Разделяйте инициализаторы запятыми.

// Initializer list sets instance variables before
// the constructor body runs.
Point.fromJson(Map<String, num> json)
    : x = json['x'],
      y = json['y'] {
  print('In Point.fromJson(): ($x, $y)');
}

Таким образом, общий способ заключается в использовании списков инициализации.

Как упоминалось выше, вы также можете инициализировать при объявлении переменной:

class Foo {
  final x = 42;
}

или можете инициализировать их параметром конструктора:

class Foo {
  final x;

  Foo(this.x);
}

, хотя эти другие подходы не всегда могут быть применимы.

...