Инициализируйте последнюю переменную с помощью этого в Dart - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть такой класс:

class A extends B {
  final Property<bool> property = Property<bool>(this);
}

class Property<T> {
  Property(this.b);
  final B b;
}

Но я получаю сообщение об ошибке this, говорящее:

Недопустимая ссылка на выражение 'this'.

Я полагаю, что в данный момент я не могу получить доступ к this, возможно, потому что ссылка на объект еще не готова.

Поэтому я попробовал другие формы инициализации этой переменной, такие как:

class A extends B {
  final Property<bool> property;
  A() : property = Property<bool>(this);
}

Но я получаю ту же ошибку.

Единственное, что работает, это:

class A extends B {
  Property<bool> property;
  A() {
   property = Property<bool>(this);
  }
}

Мне необходимо удалить объявление переменной final, что является чем-тоЯ не хочу.

Как я могу инициализировать переменную final в Dart, которая нуждается в ссылке на сам объект?

1 Ответ

2 голосов
/ 23 декабря 2019

Вы не можете ссылаться на this в любых инициализаторах, так как this еще не инициализирован сам, поэтому вы не сможете установить Property<bool> property в качестве окончательного.

Если выпросто пытаясь предотвратить изменение значения property извне экземпляра, вы можете использовать закрытый член и предоставить метод получения, чтобы предотвратить изменение. Учитывая ваш пример, это будет выглядеть примерно так:

class A extends B {

  // Since there's no property setter, we've effectively disallowed
  // outside modification of property.
  Property<bool> get property => _property;
  Property<bool> _property;

  A() {
   property = Property<bool>(this);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...