【发布时间】:2013-12-28 05:08:39
【问题描述】:
编译器禁止访问枚举构造函数中的静态字段。下面的源代码有效,它使用了一个静态字段:
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 开发人员禁止第二个示例呢?它也应该可以工作。
【问题讨论】:
-
你为什么要使用这个计数器?
-
这只是我更好地了解java的例子。正确的方法是在静态块中增加静态计数器或不创建它。是多余的,枚举元素可以算,但我想了解这段代码是怎么回事。
-
这确实是一个有趣的案例。
标签: java constructor static enums