有人可以解释一下,常量构造函数的优点是什么?如果我有一个StatefulWidget
class X extends StatefulWidget {
const X(this.a, this.b,...);
A a;
B b;
...
}
我不明白为什么使用const
。如果我理解正确,const
表示它在编译时就知道了,但是它的作用是什么?通常,a
,b
等属性在编译时未知,但在运行时未知,那么const
构造函数的意义何在?
答案 0 :(得分:3)
您当前的代码不能具有const
构造函数,因为该类中的某些成员变量未标记为final
。
const
构造函数的目的是,如果在编译时创建具有相同参数的同一类的多个实例(因此所有参数都可以由编译器确定,并且与运行时无关),则它将共享内存中的同一实例。由于所有成员变量均为final
,因此才允许这样做。
因此,优点是在特定情况下(例如dart:convert
中的某些类)可能会提高性能并改善内存。但是您必须调用const
之类的const MyClass();
构造函数以实现此const
行为。否则,const
仍可以像普通构造函数一样用于获取类的普通实例。
我个人会说,如果您有一个仅包含指向其他final
对象的const
变量的类,那么即使没有创建const
构造函数的理由也没有必要如果它永远不会被使用。但是您通常只能对简单的数据类执行此操作。
但是也可以不用一个const
构造函数。