如何在Dart构造函数中设置final / const属性

时间:2019-06-22 03:25:21

标签: dart constructor properties final

我有一个具有不变属性的类,即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:错误:找不到设置器:“ id”。       this.id = id;            ^^ hey.dart:10:10:错误:未为类别“ Hey”定义二传手'id'。    -“ Hey”来自“ hey.dart”。尝试将名称更正为现有设置器的名称,或者定义一个名为“ id”的设置器或字段。       this.id = id;            ^^

我认为const或final字段属性不需要二传手。 该API尚不清楚如何处理。

1 个答案:

答案 0 :(得分:0)

来自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);
}

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