首页 > 解决方案 > 如何在 Dart 构造函数中设置 final/const 属性

问题描述

我有一个具有不可变属性 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:错误:没有为类“Hey”定义设置器“id”。- “嘿”来自“hey.dart”。尝试将名称更正为现有 setter 的名称,或定义名为“id”的 setter 或字段。这个.id=id; ^^

我认为 const 或 final 字段属性不需要设置器。API 不清楚如何处理这个问题。

标签: dartconstructorpropertiesfinal

解决方案


来自Dart 语言之旅

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

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

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

// 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);
}

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


推荐阅读