我只想要一个带颜色的最终列表:
final List<String> COLORS = ['#cefbe4', '#81ec72', '#5cd646'];
final num MAX = 90;
class Square {
// ...
它适用于MAX,但它不会为列表编译: 初始化程序必须是编译时常量
我也尝试过:
static final num MAX = 90;
class Square {
final List<String> COLORS = ['#cefbe4', '#81ec72', '#5cd646'];
新错误:“初始化程序必须是编译时常量”
我发现唯一的解决方案是在构造函数中初始化... 我不喜欢这个解决方案:我不想要Square对象的列表实例。 我该怎么办?
答案 0 :(得分:2)
我没有得到和你一样的错误。在第一种情况下,我得到一个编译时警告“Expected constant expression”,在第二种情况下,我得到另一个编译时警告和运行时错误。尝试使用最新的SDK here。
static final num MAX = 90;
class Square {
final List<String> COLORS = ['#cefbe4', '#81ec72', '#5cd646'];
在这种情况下,静态没有任何意义,因为 static 表示类变量,它们对于同一个类的所有实例化对象都是相同的。在这种情况下, MAX 位于类边界之外。因此会显示运行时错误和编译时警告(“顶级字段不能为静态”)。
我认为 MAX 和 COLORS 对于 Square 类的所有实例都应该是相同的。所以这样做是有道理的:
class Square {
static final List<String> COLORS = const ['#cefbe4', '#81ec72', '#5cd646'];
static final num MAX = 90;
}
答案 1 :(得分:0)
列表本身是最终的部分,而不是内容。最终列表中的内容仍然可以添加和删除。
final List<String> COLOURS = new ArrayList<String>();
这将创建您的列表。列表的实际填充将在构造函数中完成,或者在代码中的任何位置完成。
在我看来,使用枚举更合适。