簡體   English   中英

Flutter/Dart - 如何在擴展抽象 class 的 class 中強制覆蓋 getter 和 setter 或任何方法?

[英]Flutter/Dart - How to force override a getter & setter or any method in a class that is extending an abstract class?

設想:

例如,我有以下抽象 class Synchronizable

abstract class Synchronizable {
  /// Getter & setter for sync status of the current data
  bool get synced;

  set synced(bool status);

  /// Method that will be called to execute the synchronization process
  Future<Either<Error, dynamic>> onSync();
}

如您所見,class 有 3 種不同的抽象方法:

  1. synced布爾值的獲取器
  2. synced布爾值的設置器
  3. 用於執行同步的抽象方法onSync

對於這個問題,我在一個虛擬實現中擴展了 class:

class DummyImpl extends Synchronizable {

}

IDE 給了我一個錯誤/警告,必須重寫抽象方法,但方法計數不是3而是2

提示實現抽象方法

當我使用提示實現時,它只覆蓋了2方法。 getteronSync方法。

自動完成以覆蓋抽象方法

注意:錯誤從 class 名稱中消失,這意味着覆蓋成功並且沒有錯過任何覆蓋方法。

問題):

  1. 在這種情況下,如何強制覆蓋setter方法?
  2. 為什么編譯器會跳過setter進行覆蓋? (不重要但對此感到好奇)

更新:

從我得到的回復來看,似乎 getter/setter 被編譯器直接替換為成員。 然而,主要問題仍未得到解答,我如何強制覆蓋任何方法。

為了反映同樣的意圖,我也更新了問題標題。 請回復以解決該部分。

謝謝你。

因為您的 setter 具有相同的名稱 getter。 所以基本上,編譯器在覆蓋 getter 后跳過了 setter。 您可以更改設置器的名稱。

好吧,gettersetter 將允許您這樣做:

instance.synced = true; // calling setter 

print(instance.synced); // calling getter

為您的 class 提供此功能的最短解決方案似乎是完全按照您的編譯器所做的那樣做:

@override
bool synced;

你可以設置它。 你可以的。 兩者都不做任何額外的工作。 但這無論如何都不是abstract強制執行的。 它只是強制它被覆蓋,你不能讓派生的 class 在覆蓋你的方法時什么都不做。 您不能強迫任何人實際將代碼放在那里。

您的約束得到滿足。 派生的 class 有一個 getter 和 setter 用於synced

暫無
暫無

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

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