Dart 初始值设定项必须是编译时常量

Dart 初始值设定项必须是编译时常量,dart,Dart,我只想有一个带有颜色的最终列表: final List COLORS=['#ceffe4'、'#81ec72'、'#5cd646']; 最终最大数量=90; 阶级广场{ // ... 对于MAX来说是可以的,但是对于列表它不编译: 初始值设定项必须是编译时常量 我还尝试: static final num MAX=90; 阶级广场{ 最终列表颜色=['#cefbe4'、'#81ec72'、'#5cd646']; 新错误:“初始值设定项必须是编译时常量” 我发现唯一的解决办法是在构造函数中初始

我只想有一个带有颜色的最终列表:

final List COLORS=['#ceffe4'、'#81ec72'、'#5cd646'];
最终最大数量=90;
阶级广场{
// ...
对于MAX来说是可以的,但是对于列表它不编译: 初始值设定项必须是编译时常量

我还尝试:

static final num MAX=90;
阶级广场{
最终列表颜色=['#cefbe4'、'#81ec72'、'#5cd646'];
新错误:“初始值设定项必须是编译时常量”

我发现唯一的解决办法是在构造函数中初始化。。。 我不喜欢这种解决方案:我不想要按正方形对象列出实例。
怎么办?

列表本身是最终的部分,而不是内容。最终列表中的内容仍然可以添加和删除

final List colors=new ArrayList();
这将创建您的列表。列表的实际填充将在构造函数中完成,或者在代码的任何地方完成


在我看来,使用枚举更合适。

我没有收到与您相同的错误。在第一种情况下,我收到编译时警告“Expected constant expression”,在第二种情况下,收到另一个编译时警告和运行时错误。请尝试您可以找到的最新SDK

static final num MAX=90;
阶级广场{
最终列表颜色=['#cefbe4'、'#81ec72'、'#5cd646'];
在这种情况下,它是静态的,因为static表示类变量,这些变量对于同一类的所有实例化对象都是相同的。在这种情况下MAX在类边界之外。因此会显示运行时错误和编译时警告(“顶级字段不能是静态的”)

我想对于Square类的所有实例,MAX颜色都应该是相同的。所以这样做是有意义的:

classsquare{
静态最终列表颜色=常量['#ceffe4'、'#81ec72'、'#5cd646'];
静态最终数值MAX=90;
}

我实际上刚刚注意到这不是Java问题,但我确信原则仍然有效。不,原则不一样。Dart要求初始化变量为常量表达式,而new ArrayList()要求初始化变量为常量表达式在初始化过程中创建一个新对象,其内容是可变的。啊,好吧,正如我所说的,我不知道Dart。是的,我使用的是上周的版本(这个版本没有通知我).现在使用const,它工作得很好!!感谢您注意,这在将来会发生变化;实际上,规范中已经对其进行了更改。根据规范,原始代码是完全正确的,我们只是等待实现赶上。您将能够使用任意表达式初始化静态/顶级变量,该表达式将他懒洋洋地评价。