簡體   English   中英

如何在Dart中保證某個命名構造函數?

[英]How do I guarantee a certain named constructor in Dart?

讓我們說我有具體的類Cat,Dog和Parrot,以及以下界面:

class HasGuid {
  HasGuid.fromId(String id);
}

我的目標是保證Cat,Dog和Parrot都有一個fromId命名構造函數。 所以,我可以撥打電話:

Cat.fromId("Whiskers") =returns> [A Future<Cat> object with id "Whiskers"]
Dog.fromId("Fido")     =returns> [A Future<Dog> object with id "Fido"]
Parrot.fromId("Polly") =returns> [A Future<Parrot> object with id "Poly"]

fromId正在通過網絡進行呼叫,因此我將其作為Future返回。 我基本上想要一個合同,聲明任何混合/擴展/實現/任何HasGuid類的類都將具有HasGuid的命名構造fromId fromId T類的fromId將獲取一個身份字符串並返回Future<T>

構造函數無法保證。

實例方法的接口(實現)保證。 超類(extends)或Mixins(with)也保證實例方法,而不是構造函數。

構造函數返回它自己的類型,而不是Future。

所以他們都應該有一個靜態的方法或類,但不能保證。

簡短的回答是你不能強制子類實現一個特定的命名構造函數......所有你能做的就是強制子類確保子類調用命名構造函數。

以下面的例子為例......

class Animal {
  String name;

  Animal.fromName(this.name);
}

class Dog extends Animal {

  Dog.withName(String name) : super.fromName(name);
}

請注意以下內容......

  1. Animal沒有零參數構造函數。
  2. 如果不從Dog調用super.fromName()構造函數,則會出現編譯錯誤
The superclass 'Animal' doesn't have a zero argument constructor.
  1. 雖然Dog必須調用fromName()構造函數...它不必調用它的命名構造函數。 在這種情況下,請注意它使用withName()

暫無
暫無

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

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