java 中禁止访问类static的构造函数中的变量。enum为什么在枚举中静态初始化的顺序没有交换?
正确代码示例:
enum Test
{
TEST1, TEST2;
static int x;
}
Run Code Online (Sandbox Code Playgroud)
为什么java的开发者没有创建这样的正确代码:
enum Test
{
static int x;
TEST1, TEST2;
}
Run Code Online (Sandbox Code Playgroud)
然后static可以在构造函数中使用变量。现在已被禁止。
有什么原因或者只是他们的设计吗?
嗯,这是为了确保安全的实例初始化 - 枚举实例与static final枚举类的实例非常相似,并且语言已定义它们首先被初始化。
但如果您知道一两个技巧,您就可以在枚举构造函数中有效地使用静态变量:
enum Test {
TEST1, TEST2;
static class Holder {
static int x;
}
Test() {
Holder.x++; // no compiler error
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅按需初始化持有者习惯用法