【问题标题】:How to set final/const properties in Dart constructor如何在 Dart 构造函数中设置 final/const 属性
【发布时间】:2019-11-04 19:55:52
【问题描述】:

我有一个具有不可变属性 int id 的类。 如何将 id 的值传递给构造函数?

class Hey
{
  var val;
  final int id;
  Hey(int id,var val)
  {
    this.id=id;
    this.val=val;
  }
}

void main()
{
  Hey hey=new Hey(0,1);
}

hey.dart:10:10:错误:找不到 Setter:'id'。 这个.id=id; ^^ hey.dart:10:10: 错误:setter 'id' 没有为类 'Hey' 定义。 - “嘿”来自“hey.dart”。尝试将名称更正为现有 setter 的名称,或定义名为“id”的 setter 或字段。 这个.id=id; ^^

我认为 const 或 final 字段属性不需要 setter。 API 并不清楚如何处理。

【问题讨论】:

    标签: dart constructor properties final


    【解决方案1】:

    来自Dart language tour

    注意:实例变量可以是final,但不能是const。最终实例变量必须在构造函数体开始之前初始化——在变量声明处、通过构造函数参数或在构造函数的initializer list

    关于初始化列表的部分说:

    除了调用超类构造函数之外,您还可以在构造函数主体运行之前初始化实例变量。用逗号分隔初始化程序。

    // Initializer list sets instance variables before
    // the constructor body runs.
    Point.fromJson(Map<String, num> json)
        : x = json['x'],
          y = json['y'] {
      print('In Point.fromJson(): ($x, $y)');
    }
    

    所以一般的方式是通过初始化列表。

    如上所述,您也可以在变量声明时进行初始化:

    class Foo {
      final x = 42;
    }
    

    或者可以通过构造函数参数来初始化它们:

    class Foo {
      final x;
    
      Foo(this.x);
    }
    

    尽管其他方法可能并不总是适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 2019-03-27
      相关资源
      最近更新 更多