[英]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 種不同的抽象方法:
synced
布爾值的獲取器synced
布爾值的設置器onSync
對於這個問題,我在一個虛擬實現中擴展了 class:
class DummyImpl extends Synchronizable {
}
IDE 給了我一個錯誤/警告,必須重寫抽象方法,但方法計數不是3
,而是2
。
當我使用提示實現時,它只覆蓋了2
方法。 getter
和onSync
方法。
注意:錯誤從 class 名稱中消失,這意味着覆蓋成功並且沒有錯過任何覆蓋方法。
問題):
setter
方法?setter
進行覆蓋? (不重要但對此感到好奇)更新:
從我得到的回復來看,似乎 getter/setter 被編譯器直接替換為成員。 然而,主要問題仍未得到解答,我如何強制覆蓋任何方法。
為了反映同樣的意圖,我也更新了問題標題。 請回復以解決該部分。
謝謝你。
因為您的 setter 具有相同的名稱 getter。 所以基本上,編譯器在覆蓋 getter 后跳過了 setter。 您可以更改設置器的名稱。
好吧,getter和setter 將允許您這樣做:
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.