2

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

final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];
final num MAX = 90;
class Square {
 // ...

MAX 可以,但不能为 list 编译:Initializer must be a compile time constant

我也试过:

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

新错误:“初始化程序必须是编译时间常数”

我发现的唯一解决方案是在构造函数中初始化......我不喜欢这个解决方案:我不想要 Square 对象的列表实例。我能怎么做 ?

4

2 回答 2

2

我没有得到和你一样的错误。在第一种情况下,我收到一个编译时警告“预期的常量表达式”,在第二种情况下,我收到另一个编译时警告和运行时错误。尝试您可以在此处找到的最新 SDK 。

static final num MAX = 90;
class Square {
    final List<String> COLORS =  ['#cefbe4', '#81ec72', '#5cd646'];

在这种情况下, static 它没有任何意义,因为static表示类变量对于同一类的所有实例化对象都是相同的。在这种情况下,MAX在类边界之外。因此会显示运行时错误和编译时警告(“顶级字段不能是静态的”)。

我猜MAXCOLORS对于Square类的所有实例都应该是相同的。所以这样做是有意义的:

class Square {
    static final List<String> COLORS = const ['#cefbe4', '#81ec72', '#5cd646'];
    static final num MAX = 90;
}
于 2012-07-05T21:27:34.827 回答
0

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

final List<String> COLOURS = new ArrayList<String>();

这将创建您的列表。列表的实际填充将在构造函数中完成,或者在代码中的任何地方完成。

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

于 2012-07-05T20:41:00.320 回答