在Dart中,你可以从构造函数中调用另一个构造函数

Gru*_*rig 19 constructor dart

也就是说,我试图从另一个构造函数调用,然后进一步构造.如果可以的话,我无法从文档中找出答案.

这是一个人为的例子,如果它有帮助:

class Chipmunk {

  Chipmunk.named(this.name);

  Chipmunk.famous() {
    this.named('Chip');  // <-- What, if anything, goes here?
    this.fame = 1000;   
  }
}

var chip = new Chimpmunk.famous();
Run Code Online (Sandbox Code Playgroud)

Den*_*low 27

有两种可能的方法:

class Chipmunk {
  String name;
  int fame;

  Chipmunk.named(this.name, [this.fame]);

  Chipmunk.famous1() : this.named('Chip', 1000);
  factory Chipmunk.famous2() {
    var result = new Chipmunk.named('Chip');
    result.fame = 1000;
    return result;
  }
}
Run Code Online (Sandbox Code Playgroud)

Chipmunk.famous1()是一个重定向的构造函数.您无法在此属性中分配属性,因此您调用的构造函数必须允许您要设置的所有属性.这就是我添加fame为可选参数的原因.在这种情况下,你可以做namefame最后.

Chipmunk.famous2()是工厂构造函数,可以只创建所需的实例.在这种情况下,fame不能是最终的(显然,如果你famenamed构造函数中使用了参数).

对于您的用例,第一个变体可能是最好的变体.

这是语言规范中的文档:

生成构造函数由构造函数名称,构造函数参数列表以及重定向子句或初始化列表和可选主体组成.

https://www.dartlang.org/docs/spec/latest/dart-language-specification.html#h.flm5xvbwhs6u

  • 所以答案介于“是”和“否”之间。奇怪的是(无论如何对我来说)重定向构造函数不能有一个主体。 (4认同)