[英]How to define value in the constructor to pass to the super constructor in Dart?
[英]How to make super constructor required in dart
我想 IDE 通知我需要在繼承的小部件的構造函數中構造超級構造函數。 例如,如果我有抽象 class 如下所示
abstract class BaseClass {
final String name;
BaseClass({
@required String name,
}) : this.name = name;
}
我想讓孩子 class 知道我需要實現超級構造函數。 下面的代碼在運行時拋出,但我如何確保它在構建時拋出或者 IDE 在構建之前讓我知道?
class ChildClass extends BaseClass{}
步驟1:
abstract class BaseClass {
final String name;
BaseClass(
String name,
) : this.name = name;
}
class ChildClass extends BaseClass{
ChildClass() {}
}
您將收到來自 IDE 的警告:
超類“BaseClass”沒有零參數構造函數。
這意味着您需要在 ChildClass 的構造函數中調用超類的構造函數。
第2步:
class ChildClass extends BaseClass{
ChildClass() : super('Shubham');
get getName => name;
}
現在我們可以創建一個ChildClass
的實例來測試它。
void main() {
var child = ChildClass();
print('Name : ${child.getName}');
}
Output:
舒巴姆
如果派生的 class 忽略顯式調用基本 class 構造函數,它會隱式調用具有零 arguments 的基類的默認(未命名)構造函數。 因此,您有多種選擇來獲得構建時警告:
required
關鍵字而不是package:meta
的@required
注釋。如文檔Dart lang tour中所述
構造函數不被繼承
子類不從其超類繼承構造函數。 沒有聲明構造函數的子類只有默認(無參數,無名稱)構造函數。
因此,您必須調用超級構造函數才能獲得構建時間警告。
class ChildClass extends BaseClass{
ChildClass() : super(); // This will give you 'The parameter 'name' is required.'
}
但是要在嘗試實例化它時得到警告,無論如何您都需要添加另一個必需的注釋。
class ChildClass extends BaseClass{
ChildClass({@required name}) : super(name: name);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.