[英]Dart Abstract class of Generic Type with Named Constructor
我試圖構建一個抽象類,需要Dart中的命名構造函數。 給定一些Map(m),這個泛型類型必須能夠實例化它自己。
Dart編譯器拋出T.fromJson -> Invalid constructor name.
我嘗試編碼:
abstract class JsonMap<T> {
Map toJson();
T.fromJson(Map m);
}
我掙扎着相同的概念(在同一個地方... API解析:)))我沒有找到一個合適的解決方案。
但也許你可以在檢查塊模式時使用我發現的這個東西(我沒有將它用於我的模型部分):
abstract class SomeBase {
void load();
}
class Provider<T extends SomeBase> extends InheritedWidget {
final T something;
Provider({
Key key,
@required this.something,
}): super(key: key);
@override
bool updateShouldNotify(_) {
return true;
}
static Type _typeOf<T>() => T;
static T of<T extends SomeBase>(BuildContext context){
final type = _typeOf<Provider<T>>();
Provider<T> provider = context.inheritFromWidgetOfExactType(type);
return provider.something;
}
}
或者只是使用它而不將其封裝在繼承的小部件中,並提供已經初始化的對象(如用戶或您要解析的任何內容),只需從提供的JSON中加載值。
您正在創建一個名為JsonMap
的類,該類在類型T
上進行參數化。 T
不是您的類的名稱,因此T.fromJson
不是T.fromJson
的有效命名構造JsonMap
。
如果你想讓JsonMap
有一個命名的構造函數,它應該是JsonMap.fromJson(Map m)
。
未經測試,但在我的頭腦中,您應該像這樣編寫代碼:
abstract class JsonMap<T> {
Map<String, dynamic> toJson();
T fromJson(Map<String, dynamic> m);
}
點使得fromJson(Map m)
成為T類型的構造函數,或屬於類型T的靜態函數。沒有點,它是一個屬於抽象類JsonMap的函數,返回類型T.指定映射類型是好的做法,如果你知道它會是什么(比如json)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.