[英]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.