簡體   English   中英

Dart 抽象 class 與通用工廠

[英]Dart abstract class with generic factory

我有一個泛型類型的抽象 class 。 我希望這個 class 定義一個工廠,所以如果實施 class 沒有定義這個,它會發出警告。 但是,當使用泛型類型時,我無法弄清楚如何做到這一點。 抽象的 class 只是不斷給我錯誤。

這是我的 class 以及一些無效解決方案的示例:

abstract class Bar<T> {

  // Error: The class 'Bar' doesn't have a default constructor
  factory Bar.someFn(Map<String, dynamic> myMap) => Bar<T>(myMap);

  // Error 1: The name of a factory constructor must be the same as the name of the immediately enclosing class
  // Error 2: 'T' isn't a function.
  // Error 3: Try correcting the name to match an existing function, or define a method or function named 'T'
  factory T.someFn(Map<String, dynamic> myMap) => T(myMap);
}

擁有正確的抽象 class 將產生以下結果:

// BAD!
class Foo implements Bar<Foo> {
  
  // Missing implementation of someFn
}

// OK!
class Foo implements Bar<Foo> {

  @override
  factory Foo.someFn(Map<String, dynamic> myMap) => Foo(x: myMap['x'], y: myMap['y']);
}

有沒有辦法實現我想要的?

不。

構造函數不是繼承的,它們不是任何接口的一部分,因此您在超類中編寫的任何內容都不會影響子類的構造函數。

每個 class 都可以定義自己的構造函數。 您唯一能做的就是向超類添加一個生成構造函數,然后擴展超類(不僅僅是實現其接口)的子類將不得不調用該超類構造函數作為它們的超構造函數調用。

暫無
暫無

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

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