我正在尝试构造一个抽象类,它需要Dart中的命名构造函数。给定一些Map (m),这个泛型类型必须能够实例化它自己。
Dart编译器正在抛出T.fromJson -> Invalid constructor name.
我尝试这样编码:
abstract class JsonMap<T> {
Map toJson();
T.fromJson(Map m);
}
发布于 2019-04-25 13:45:41
我为同样的概念而苦苦挣扎(在同样的地方...API parsing:),我没有找到合适的解决方案。
但也许你可以使用我在检查块模式时发现的东西(我不是在我的模型部分使用它):
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加载值。
发布于 2019-04-26 08:31:33
您正在创建一个在类型T
上参数化的名为JsonMap
的类。T
不是您的类名,因此T.fromJson
不是JsonMap
的有效命名构造函数。
如果你想让JsonMap
有一个命名的构造函数,它应该是JsonMap.fromJson(Map m)
。
发布于 2019-08-07 21:02:41
未经测试,但我不知道,你应该像这样写你的代码:
abstract class JsonMap<T> {
Map<String, dynamic> toJson();
T fromJson(Map<String, dynamic> m);
}
点使fromJson(Map m)
成为T类型的构造函数,或者是属于T类型的静态函数。没有点,它是属于抽象类JsonMap的函数,返回类型T。如果您知道映射类型是什么(就像json一样),指定映射类型是一种很好的做法。
https://stackoverflow.com/questions/55850314
复制