multiple_super_initializers
一個建構函式最多隻能有一個 'super' 初始化器。
描述
#當建構函式的初始化列表包含對超類中多個建構函式的呼叫時,分析器會產生此診斷資訊。初始化列表必須且只能包含一個這樣的呼叫,它可以是顯式的或隱式的。
示例
#以下程式碼會產生此診斷資訊,因為類 B 的建構函式的初始化列表同時呼叫了超類 A 中的 one 和 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.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, '');
}