首页 > 解决方案 > 如何不将空参数从子类传递给 Dart 中的超类?

问题描述

假设您有以下类及其子类。

class ParentClass {
  final int a;
  final int b;
  ParentClass({this.a = 1, this.b = 2});
}

class ChildClass extends ParentClass {
  ChildClass({
    int? a,
    int? b,
  }) : super(a: a, b: b);
}

我想做的是,当ab不给ChildClass' 的构造函数时,在 ' 中定义ab定义它们的默认值ParentClass,分别为 1 和 2:

void main() {
   final child = ChildClass();
   print(child.a);   // expect to see '1'
   print(child.b);   // expect to see '2'
}

但是,我从上面的代码中实际得到的是两者的“null”。显然,ChildClass将“null”传递给了ParentClass,在这种情况下它会忽略其可选参数的默认值。

有没有一种方法可以避免将未指定的可选参数从 传递ChildClass到 ,或者即使传递了“null”也ParentClass可以保持默认值,而无需在 中手动指定相同的默认值?ParentClassChildClass

标签: classdartinheritance

解决方案


不确定这是否能解决您的问题,但这是我正确的做法:

class ParentClass {
  final int a;
  final int b;
  ParentClass({int? a, int? b})
      : this.a = a ?? 1,
        this.b = b ?? 2;
}

class ChildClass extends ParentClass {
  ChildClass({
    int? a,
    int? b,
  }) : super(a: a, b: b);
}

推荐阅读