编译器禁止在枚举构造函数中访问静态字段。下面的源代码有效,它使用了一个静态字段:
public enum TrickyEnum
{
TrickyEnum1, TrickyEnum2;
static int count;
TrickyEnum()
{
incrementCount();
}
private static void incrementCount()
{
count++;
}
public static void main(String... args)
{
System.out.println("Count: " + count);
}
}
输出:
数量: 2.
但是尽管差异极小,下面的代码却无法正常工作:
public enum TrickyEnum
{
TrickyEnum1, TrickyEnum2;
static int count;
TrickyEnum()
{
count++; //compiler error
}
public static void main(String... args)
{
System.out.println("Count: " + count);
}
}
在我的搜索中,人们通常声称问题是由于静态字段初始化的顺序。但第一个示例可以工作,所以为什么Java开发人员禁止第二个示例?它也应该可以工作。