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

时间:2019-04-25 13:22:50

标签: dart

我试图在Dart中构造一个需要命名构造函数的抽象类。给定一些Map(m),此泛型类型必须能够实例化其自身。

Dart编译器抛出T.fromJson -> Invalid constructor name.

我尝试对此进行编码:

abstract class JsonMap<T> {
  Map toJson();
  T.fromJson(Map m);
}

3 个答案:

答案 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的类,该类的类型为TT不是您的类的名称,因此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),那就是一个好习惯。