【问题标题】:Can I create a const object from a json string?我可以从 json 字符串创建一个 const 对象吗?
【发布时间】:2020-11-28 13:37:43
【问题描述】:

我想从一个固定的 JSON 字符串创建一个 const 对象。 此 json 字符串来自 --dart-define 参数。

我正在使用 const _APP_CONF = String.fromEnvironment('APP_CONF', defaultValue: '{}'); 获取它

我已经尝试了下面的代码,但它不起作用。编译器抱怨第二个构造函数:

class AuthnProvider {
  final String id;
  final String clientId;
  final List<String> scopes;

  const AuthnProvider(
      {this.id,
      this.clientId,
      this.scopes});

  const AuthnProvider.fromJson(final Map<String, dynamic> json)
      : id = json['id'],
        clientId = json['clientId'],
        scopes = json['scopes'].cast<String>();

json 参数来自json.decode() 方法。

我还尝试从 json 映射创建 const 和 final var 并使用第一个构造函数,但编译器也会出错。

【问题讨论】:

    标签: dart


    【解决方案1】:

    这是意料之中的。 const 创建一个编译时常量。 Dart 在编译期间不执行代码,因此无法从Map 创建const。这就是 const 构造函数不能有主体的原因,也是没有其他方法可以解决此限制的原因。

    您没有在问题中提及这样做的原因,但如果是为了性能,差异将可以忽略不计。如果是为了不变性,我们看到的所有字段都已经是final了,所以把对象设为const没什么区别。

    【讨论】:

    • 原因是我只是试图直接从 String.fromEnvironment() 值创建 const 对象,而不是创建一个 const 然后对象。谢谢!
    猜你喜欢
    • 2023-03-22
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多