Dart - 如何在子类的构造函数中调用超类的工厂构造函数?

5 dart

我想做如下的事情。

class MySuperClass {
  final String s;
  MySuperClass(this.s);
  
  factory MySuperClass.from(int a) {
    return MySuperClass(a.toString());
  }
}

class MySubClass extends MySuperClass {
  final int b;
  
  MySubClass(int a, this.b) : super.from(a); // error
}
Run Code Online (Sandbox Code Playgroud)

我将如何调用超类的工厂构造函数?

给出的错误是:
The constructor 'MySuperClass MySuperClass.from(int a)' is a factory constructor, but must be a generative constructor to be a valid superinitializer

Shu*_*oni 2

据我所知,您不能从子类调用工厂构造函数。例如,工厂构造函数可以返回一个单例。

相反,创建一个私有构造函数并在构造函数和子类中MySuperClass._internal使用它。factory

class MySuperClass {
  final String s;
  MySuperClass._internal(this.s);
  
  factory MySuperClass(int a) {
    print('called');
    return MySuperClass._internal(a.toString());
  }
}

class MySubClass extends MySuperClass {
  final int b;
  
  MySubClass(int a, this.b) : super._internal(a.toString());
}
Run Code Online (Sandbox Code Playgroud)