跳到主要内容

非_生成式_隐式_构造函数

超类 '{0}' 的未命名构造函数(由 '{1}' 的默认构造函数调用)必须是生成式构造函数,但找到的是工厂构造函数。

描述

#

当一个类具有隐式生成式构造函数且其超类具有显式的未命名工厂构造函数时,分析器会产生此诊断信息。子类中的隐式构造函数隐式调用超类中的未命名构造函数,但生成式构造函数只能调用另一个生成式构造函数,而不能调用工厂构造函数。

示例

#

以下代码会产生此诊断信息,因为 B 中的隐式构造函数调用了 A 中的未命名构造函数,但 A 中的构造函数是工厂构造函数,而此处需要的是生成式构造函数

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B extends A {}

常见修复方法

#

如果超类中的未命名构造函数可以是生成式构造函数,则将其更改为生成式构造函数

dart
class A {
  A();
  A.named();
}

class B extends A { }

如果未命名构造函数不能是生成式构造函数,且超类中还有其他生成式构造函数,则显式调用其中一个

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B extends A {
  B() : super.named();
}

如果没有可用的生成式构造函数且无法添加,则应实现该超类而不是继承它

dart
class A {
  factory A() => throw 0;
  A.named();
}

class B implements A {}