Как специализировать (переопределить) поля класса в Dart? - PullRequest
0 голосов
/ 30 октября 2018

Я бы хотел специализировать поля (переопределить), когда class является расширенным или реализовано в Dart 2.

См. Код:

abstract class Abase {
  String id;
  List<Bbase> bbases;
}

abstract class Bbase {
  String id;
}

class A implements Abase {
  String id;
  String name;

  List<B> bbases; // 'A.bbases=' ('(List<B>) → void') isn't a valid override of 'Abase.bbases=' ('(List<Bbase>) → void').
}

class B implements Bbase {
  String id;
}

class Abase имеет общее поле List<Bbase> bbase, а в class A я хотел бы специализировать это поле с List<B> bbase.

Но это невозможно. Эта ошибка отображается на analyzer или build_runner:

'A.bbases =' ('(List) → void') не является корректным переопределением 'Abase.bbases =' ('(Список) → void').

  1. Есть ли причина для того, чтобы не принимать эту специализацию полей?
  2. Есть ли другой способ специализировать поля на extends или implements

1 Ответ

0 голосов
/ 30 октября 2018

Вы должны использовать дженерики:

abstract class Abase<T extends Bbase> {
  String id;
  List<T> bbases;
}

abstract class Bbase {
  String id;
}

class A implements Abase<B> {
  String id;
  String name;

  List<B> bbases;
}

class B implements Bbase {
  String id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...