#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);
}
Возможно ли это?
Ответ №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
конструктор для каждого конструктора суперкласса с теми же параметрами (включая значения по умолчанию), которые пересылаются непосредственно в конструктор суперкласса.
Не делайте этого, чтобы избежать повторного ввода значения по умолчанию!