具有命名构造函数的泛型类型的Dart抽象类

具有命名构造函数的泛型类型的Dart抽象类,dart,Dart,我试图构造一个抽象类,它需要Dart中的命名构造函数。给定一些映射(m),这个泛型类型必须能够实例化自己 Dart编译器正在抛出T.fromJson->无效的构造函数名称。 我尝试编写以下代码: 抽象类JsonMap{ 映射到json(); T.fromJson(Map m); } 我在同一个地方(在同一个地方…API解析:)与同一个概念斗争,但我没有找到合适的解决方案 但也许你可以使用我在检查块模式时发现的东西(我没有将其用于我的模型零件): 抽象类SomeBase{ 空荷载(); } 类提供

我试图构造一个抽象类,它需要Dart中的命名构造函数。给定一些映射(m),这个泛型类型必须能够实例化自己

Dart编译器正在抛出
T.fromJson->无效的构造函数名称。

我尝试编写以下代码:

抽象类JsonMap{
映射到json();
T.fromJson(Map m);
}

我在同一个地方(在同一个地方…API解析:)与同一个概念斗争,但我没有找到合适的解决方案

但也许你可以使用我在检查块模式时发现的东西(我没有将其用于我的模型零件):

抽象类SomeBase{
空荷载();
}
类提供程序扩展了InheritedWidget{
最后是什么;
提供者({
关键点,
@需要这个东西,
}):super(key:key);
@凌驾
bool UPDATESHOLDNOTIFY(u41;{
返回true;
}
静态类型_typeOf()=>T;
静态T of(BuildContext){
最终类型=_typeOf();
Provider Provider=context.inheritFromWidgetOfExactType(类型);
归还某物;
}
}

或者只使用它而不将其封装在继承的小部件中,并提供已经初始化的对象(如用户或您正在解析的任何对象),这些对象只加载来自提供的JSON的值。

您正在创建一个名为
JsonMap
的类,该类在
T
类型上参数化
T
不是类的名称,因此
T.fromJson
不是
JsonMap
的有效命名构造函数


如果您希望
JsonMap
有一个命名构造函数,那么它应该是
JsonMap.fromJson(Map m)

未经测试,但在我看来,您应该这样编写代码:

abstract class JsonMap<T> {
  Map<String, dynamic> toJson();
  T fromJson(Map<String, dynamic> m);
}
抽象类JsonMap{
映射到json();
T fromJson(Map m);
}

dot使
fromJson(Map m)
成为类型T的构造函数,或者是属于类型T的静态函数。没有dot,它是属于抽象类JsonMap的函数,返回类型T。如果您知道映射类型会是什么,那么指定映射类型是一种很好的做法(与json类似).

我不希望
JsonMap
有一个命名构造函数,我希望扩展
JsonMap
的具体类被强制实现一个同名构造函数。@BajaBob这仍然不清楚。您的意思是希望
JsonMap
有一个派生类(即
class-derived扩展了JsonMap{derived.fromJson(Map m){…}
还是希望
T
有一个命名构造函数?(或者您正在做CRTP的事情
T
是派生类型吗?)你也应该在你的问题中澄清这一点。有趣!我对Dart还是新手。介意解释一下这门课吗?
abstract class JsonMap<T> {
  Map<String, dynamic> toJson();
  T fromJson(Map<String, dynamic> m);
}