跳到主要內容

非_生成式_隱式_建構函式

超類 '{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 {}