簡體   English   中英

無法在 Dart 構造函數中初始化最終屬性

[英]Can't initialize final property inside Dart constructor

我想在 Dart 中創建一個 class,它的最終List屬性在開始時只是空的,稍后可以填充。 使用下面的代碼我得到錯誤“數字不能用作設置器,因為它是最終的”。 令我困惑的是變量是在構造函數內部初始化的。

class Foo {
  final String s;
  final List<int> numbers;

  Foo(this.s) {
    numbers = List<int>(); // error
  }
}

最好的方法是什么?

在構造函數的初始化列表中初始化實例變量:

  Foo(this.s) : numbers = <int>[];

在 Dart 中,final 變量在構造函數主體開始運行時不可賦值。 構造函數體內的代碼只是普通代碼,可以訪問 object 並對其執行任何操作。 Dart 通過要求在構造函數主體開始之前初始化最終變量來確保沒有人能夠在未初始化的 state 中看到最終實例變量,這意味着在初始化列表中(或作為初始化形式,如this.s ,或通過具有初始化器變量聲明本身的表達式。)

List()構造函數已被嚴重棄用並且很快就會消失,因此請改用列表文字來創建列表。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM