有人能解释一下常量构造函数的优点吗?如果我有一个 Stateful widget。
class X extends StatefulWidget {
const X(this.a, this.b,...);
A a;
B b;
...
}
我不理解为什么要使用 const
。如果我理解正确,const
意味着它在编译时已知,但这有什么作用呢?通常属性 a
、b
等在编译时是未知的,在运行时才会确定,那么 const
构造函数的目的是什么呢?
有人能解释一下常量构造函数的优点吗?如果我有一个 Stateful widget。
class X extends StatefulWidget {
const X(this.a, this.b,...);
A a;
B b;
...
}
我不理解为什么要使用 const
。如果我理解正确,const
意味着它在编译时已知,但这有什么作用呢?通常属性 a
、b
等在编译时是未知的,在运行时才会确定,那么 const
构造函数的目的是什么呢?
const
构造函数,因为类中的某些成员变量没有标记为 final
。
const
构造函数的目的是,如果你在编译时使用相同的参数创建同一类的多个实例(所以所有参数都可以由编译器确定,而不依赖于运行时),它们将在内存中共享同一实例。这仅在所有成员变量都是 final
的情况下才被允许。const
构造函数可能会带来潜在的性能和内存改进。但是,你必须像这样调用 const
构造函数: const MyClass();
以获得这种 const
行为。否则,const
仍然可以像普通构造函数一样使用,以获取类的普通实例。const
对象的 final
变量的类,即使永远不会使用 const
构造函数,也没有理由不创建 const
构造函数。但是,你通常只能在简单数据类上这样做。const
构造函数也完全可以。
a
,它在编译时不是已知的,而是例如从服务器加载的,那么const构造函数就没有效果了?类似于a = await loadFromServer(); X x = const X(a)
,因为a
不是常量? - König Weya
不是可以在编译时确定的值,因此您不应该能够这样做。在调用const
构造函数时,使用const
关键字有相当严格的规则。 - julemand101