在 Dart 中使用 Setter 和构造函数

gri*_*asd 3 dart flutter

如何从 Dart 的默认构造函数中使用私有实例变量的 setter?

给定示例类:

class A {
  String name;
  int _age;

  int get age => _age;

  set age(age) {
    _age = age ?? 0;
  }

  A(this.name, this._age);
}
Run Code Online (Sandbox Code Playgroud)

我如何使用这个构造函数来遍历该set age()函数?除了使用 a 之外还有什么办法factory吗?我想做这样的事情

A(this.name, newAge): age = newAge;
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误,迫使我只从构造函数中设置实例变量,这让我只需复制设置器:

A(this.name, newAge): _age = newAge ?? 0;
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了一些东西,或者这对于 dart 来说是不可能的?

jam*_*lin 6

构造函数的初始化列表只能用于初始化成员(或调用基类构造函数)。(此外,当初始化列表被执行时,this还没有生效,所以你不能访问任何成员。)

如果您想做其他类型的初始化工作,您可以在构造函数主体中进行,此时该对象被认为已充分构造为this有效:

A(this.name, int newAge) {
  age = newAge;
}
Run Code Online (Sandbox Code Playgroud)

另请参阅: