跳到主要內容

multiple_super_initializers

一個建構函式最多隻能有一個 'super' 初始化器。

描述

#

當建構函式的初始化列表包含對超類中多個建構函式的呼叫時,分析器會產生此診斷資訊。初始化列表必須且只能包含一個這樣的呼叫,它可以是顯式的或隱式的。

示例

#

以下程式碼會產生此診斷資訊,因為類 B 的建構函式的初始化列表同時呼叫了超類 A 中的 onetwo 建構函式

dart
class A {
  int? x;
  String? s;
  A.one(this.x);
  A.two(this.s);
}

class B extends A {
  B() : super.one(0), super.two('');
}

常見修復方法

#

如果其中一個超類建構函式可以完整初始化例項,則移除另一個

dart
class A {
  int? x;
  String? s;
  A.one(this.x);
  A.two(this.s);
}

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

如果其中一個超類建構函式實現的初始化可以在建構函式體中完成,則移除其 super 呼叫,並在建構函式體中執行初始化

dart
class A {
  int? x;
  String? s;
  A.one(this.x);
  A.two(this.s);
}

class B extends A {
  B() : super.one(0) {
    s = '';
  }
}

如果初始化只能在超類中的建構函式中執行,則要麼新增一個新的建構函式,要麼修改現有建構函式之一,以便存在一個允許在單次呼叫中完成所有必需初始化的建構函式

dart
class A {
  int? x;
  String? s;
  A.one(this.x);
  A.two(this.s);
  A.three(this.x, this.s);
}

class B extends A {
  B() : super.three(0, '');
}