跳到主要內容

extension_declares_instance_field

擴充套件不能宣告例項欄位。

描述

#

當在擴充套件中發現例項欄位宣告時,分析器會生成此診斷資訊。定義例項欄位無效,因為擴充套件只能新增行為,而不能新增狀態。

示例

#

以下程式碼會產生此診斷資訊,因為 s 是一個例項欄位

dart
extension E on String {
  String s;
}

常見修復方法

#

如果值無需儲存在欄位中即可計算,則嘗試使用 getter 或方法

dart
extension E on String {
  String get s => '';

  void s(String value) => print(s);
}

如果值必須儲存,但對於每個例項都相同,則嘗試使用靜態欄位

dart
extension E on String {
  static String s = '';
}

如果每個例項需要儲存自己的值,則嘗試使用由靜態 Expando 支援的 getter 和 setter 對

dart
extension E on SomeType {
  static final _s = Expando<String>();

  String get s => _s[this] ?? '';
  set s(String value) => _s[this] = value;
}