dart - 如何在 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 不清楚如何处理这个问题。
解决方案
来自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);
}
尽管这些其他方法可能并不总是适用。
推荐阅读
- python - 如何在 python 中对关键字参数使用 executor.map 函数
- java - 与 zip aws S3 对象相关的类和接口有哪些?
- button - SwiftUI 破坏性按钮样式
- android - 自定义后的材质复选框样式
- events - 从事件驱动架构中的微服务获取信息
- sql - 使用 NVARCHAR 序列更新主键
- bash - Openvpn 无法通过基于用户的脚本发送 cURL 请求
- javascript - 如何过滤 django x chart.js 图表?未捕获的类型错误
- javascript - @@iterator- Javascript - 它到底是什么?
- bluetooth-lowenergy - 无法检索 iBeacon UUID(ESP32 BLE 扫描仪)