我试图在Dart中构造一个需要命名构造函数的抽象类。给定一些Map(m),此泛型类型必须能够实例化其自身。
Dart编译器抛出T.fromJson -> Invalid constructor name.
我尝试对此进行编码:
abstract class JsonMap<T> {
Map toJson();
T.fromJson(Map m);
}
答案 0 :(得分:2)
我在相同的概念(在相同的地方... API解析:))中苦苦挣扎,但没有找到合适的解决方案。
但是也许您可以使用我在检查块模式时发现的东西(我没有将其用于模型部分):
package com.nachikamod.pran;
public class Contacts {
public String Access, name, post, uid;
public Contacts() {
}
public Contacts(String Access, String name, String post, String uid) {
this.Access = Access;
this.name = name;
this.post = post;
this.uid = uid;
}
public String getAccess() {
return Access;
}
public void setAccess(String Access) {
this.Access = Access;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPost() {
return post;
}
public void setPost(String post) {
this.post = post;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
}
或者只使用它而不将其封装在继承的小部件中,并提供已经初始化的对象(例如用户或您正在解析的对象),这些对象仅从提供的JSON加载值即可。
答案 1 :(得分:0)
您正在创建一个名为JsonMap
的类,该类的类型为T
。 T
不是您的类的名称,因此T.fromJson
不是JsonMap
的有效的命名构造函数。
如果您希望JsonMap
有一个命名构造函数,则应该为JsonMap.fromJson(Map m)
。
答案 2 :(得分:0)
未经测试,但要忘了,您应该这样编写代码:
abstract class JsonMap<T> {
Map<String, dynamic> toJson();
T fromJson(Map<String, dynamic> m);
}
点使fromJson(Map m)
成为类型T的构造函数,或者是属于类型T的静态函数。没有点,它是属于抽象类JsonMap的函数,返回类型T。指定映射类型为如果您知道会是什么(例如json),那就是一个好习惯。