Dart 你能为任何类定义常量变量吗?

Dart 你能为任何类定义常量变量吗?,dart,Dart,声明常量时,不理解以下观察结果: const abc=[3,4,5,6] 这里我们将abc声明为const意味着我们正在修复指向对象的指针。这是否意味着我们不能通过abc更改列表成员 i、 e 或者我们不能给它分配一个新的列表 abc=[5,6,7] 如果创建类abcd,则我无法将此类的对象分配给常量变量。请告知原因 void main(){ 常数a=[1,2,4,5]; a[0]=7; 印刷品(a); 常数b=abcd(); } 类abcd{ 字符串名; 字符串toString(){ 返回

声明常量时,不理解以下观察结果:

const abc=[3,4,5,6]
这里我们将abc声明为const意味着我们正在修复指向对象的指针。这是否意味着我们不能通过abc更改列表成员 i、 e

或者我们不能给它分配一个新的列表

abc=[5,6,7]
如果创建类abcd,则我无法将此类的对象分配给常量变量。请告知原因

void main(){
常数a=[1,2,4,5];
a[0]=7;
印刷品(a);
常数b=abcd();
}
类abcd{
字符串名;
字符串toString(){
返回名称;
}
}

const
表示该值可以并且将在编译时确定,然后不能更改。对于列表,
const
表示您得到一个不可修改的列表。此外,指向列表的变量本身被标记为final,并且在为其赋值后无法修改

由于对象本身无法修改,您需要定义一个
const
构造函数,并且
类的所有成员在赋值后都不能修改,因此需要将字段标记为
final

所以你的例子应该是:

void main() {
  const b = abcd('name');
  print(b);
}

class abcd {
  final String name;

  const abcd(this.name);

  @override
  String toString() {
    return name;
  }
}

我还想补充一点,
const
构造函数需要能够在编译时计算出值。因此,这里可以使用的逻辑量相当有限。

由于常量构造函数需要在编译时计算出值,因此我们在运行时将值传递给构造函数。不,您不能使用在运行时生成的值。例如,从用户处获取输入。但是您仍然可以调用
const
构造函数,只从中获取一个普通对象(由于所有成员都是
final
,因此在创建之后仍然无法更改)。为了保证获得一个
const
实例,您需要显式地将
const
写入结果类型或在构造函数调用时写入。
void main() {
  const b = abcd('name');
  print(b);
}

class abcd {
  final String name;

  const abcd(this.name);

  @override
  String toString() {
    return name;
  }
}