dart - 如何使构造函数使用与super相同的默认值?

标签 dart

我想指定一个不会更改测试默认值的构造函数。
因此,应打印“test text”而不是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
这可能吗?

最佳答案

不是这样的。如果编写构造函数,则无法以任何方式自动获取父类(super class)构造函数的默认值,并且必须将参数传递给超构造函数,或者不将其传递给初始化程序列表。它不能依赖于子类构造函数的参数值。因此,您必须再次编写父类(super class)构造函数参数默认值。
您可以做的一件事(我不建议您仅这样做)是,如果子类构造函数的参数与父类(super class)构造函数的参数完全相同,则可以在mixin中声明子类的成员,然后子类是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为每个父类(super class)构造函数提供一个构造函数,并使用相同的参数(包括默认值)将其直接转发给父类(super class)构造函数。
不要这样做只是为了避免再次写入默认值!

关于dart - 如何使构造函数使用与super相同的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64706484/

相关文章:

dart - 使用 Dismissible 删除项目时的 ListView 动画

dart - 分析器无法在Visual Studio Code中工作……还是吗?

dart - 从dartanalyzer中排除所有生成的代码

android - 如何从 Flutter 中的 Assets 中读取 .txt 文件?

Flutter - 如何修复卡片中的文本溢出?

encoding - 如何将代码页 1250 的字符串保存到 Dart 中的文件中?

flutter - flutter 如何一起使用 Stack 和 listview

android-studio - 更新后 Android Studio Flutter 错误

flutter - "setState() or markNeedsBuild() called during build"尝试在消费者小部件(提供程序包)内的导航器中推送替换时出错

dart - DARTFMT搞砸了@Component装饰器格式