【问题标题】:Flutter, why use "static" in the fromJson method?Flutter,为什么在 fromJson 方法中使用“静态”?
【发布时间】:2021-02-28 12:01:15
【问题描述】:
static TodoEntity fromJson(Map<String, Object> json) {
    return TodoEntity(
      json['task'] as String,
      json['id'] as String,
      json['note'] as String,
      json['complete'] as bool,
    );
  }

static TodoEntity fromSnapshot(DocumentSnapshot snap) {
    return TodoEntity(
      snap.data()['task'],
      snap.id,
      snap.data()['note'],
      snap.data()['complete'],
    );
  }

我现在正在研究“fromJson”方法,并且

在这个例子中,为什么他们使用“静态”?

不知道为什么

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    因为fromJsonclass 相关而不是object(每个静态变量/方法都是这种情况)

    所以从名称fromJson,你需要从你的json创建TodoEntity对象,这意味着你还没有对象,这意味着你不能调用fromJson,所以在这里使用static是必须的,

    另一种选择是通过constructor 传递您的json,但使用static 必须干净且通用。

    没有静态的例子: 从 json 创建新对象

    var json = {...};
    TodoEntity todo = TodoEntity();
    TodoEntity todo2 = todo.fromJson(json);
    
    or
    
    var json = {...};
    TodoEntity todo = TodoEntity();
    todo = todo.fromJson(json);
    

    如您所见,您始终需要一个对象(待办事项)来调用 fromJson

    但使用静态

    var json = {...};
    TodoEntity todo = TodoEntity.fromJson(json);
    

    static 表示你可以在没有对象的情况下调用这个函数

    【讨论】:

    • 感谢金牌排名者 ikerfah。但是我很笨所以我还是不完全明白你能提供小代码吗??
    • 谢谢,但为什么不直接创建一个对象并使用其他成员函数呢? (我的意思是没有 fromJson 函数的普通函数)
    • 这完全取决于您的用例,您始终可以使用成员函数,但正如我向您展示的那样,它不适合这种情况
    【解决方案2】:

    为产生给定类的新实例的方法实现“静态工厂方法”模式所需的 static 关键字。

    如果这些方法不是static,您必须拥有TodoEntity 的实例才能调用它们。

    但是它们是static,所以不需要创建任何实例来调用它们:

    TodoEntity.fromJson(jsonMap);
    

    【讨论】:

    • 谢谢,但是为什么不直接创建一个对象并使用一个函数呢?
    • 此函数用于创建新对象。所以,如果不是static,当您需要“创建对象来创建对象”时。所以你最终会得到两个对象而不是一个,第一个完全没用。使用static 函数,您只会得到一个对象。尝试谷歌更多关于什么是static 以及如何使用它,我希望这将有助于理解这个主题。
    猜你喜欢
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 2018-10-27
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多