Как я могу заставить конструктор использовать то же значение по умолчанию, что и super?

#dart

#dart

Вопрос:

Я хочу указать конструктор, который не изменяет значение test по умолчанию. Поэтому вместо «тестовый текст» следует печатать null .

 void main() async {
  print(B().text);
}

class A{
  A({this.text = "test text"});
  
  final text;
}

class B extends A{
  B({String text}) : super(text: text);
}
  

dartpad

Возможно ли это?

Ответ №1:

Не как таковой. Если вы пишете конструктор, вы никак не можете автоматически получить значение конструктора суперкласса по умолчанию, и вам нужно либо передать параметр суперконструктору, либо нет в списке инициализаторов. Это не может зависеть от значения параметра конструктора подкласса. Итак, вам нужно снова записать значение параметра конструктора суперкласса по умолчанию.

Единственный способ, который вы можете сделать (и я не рекомендую делать это только для этого), заключается в том, что если параметры конструктора подкласса точно такие же, как у конструктора суперкласса, вы можете объявить члены вашего подкласса в a mixin и сделать подкласс смешанным приложением.

Поэтому вместо:

 class SuperClass {
  SuperClass(...args) : ...
  ...
}

class SubClass extends SuperClass {
  SubClass(...args) : super(...args);
  members() ...
}
  

вы делаете:

 class SuperClass {
  SuperClass(...args) : ...
  ...
}

mixin _SubClass on SuperClass {
  members() ...
}
class SubClass = SuperClass with _SubClass;
  

Это даст SubClass конструктор для каждого конструктора суперкласса с теми же параметрами (включая значения по умолчанию), которые пересылаются непосредственно в конструктор суперкласса.

Не делайте этого, чтобы избежать повторного ввода значения по умолчанию!