可能重复:
Java: Local Enums
为什么我们不能在java中的特定方法中定义枚举?如果我有一个场景,我将在方法中使用这些枚举值,而不是在任何其他地方。在方法中声明而不是在全局定义它不是很好吗?我的意思是公开或默认。
答案 0 :(得分:7)
您无法按照JavaDocs所述的方法级别进行定义。 (我希望看到一种允许这种语言的语言)
嵌套枚举类型是隐式静态的。允许将嵌套的枚举类型显式声明为静态。
这意味着无法定义本地(§14.3)枚举,或在内部类中定义枚举(§8.1.3)。
你可以做什么在类级别声明它和方法级别的变量:
public class Light {
...
private LightSwitch position;
private enum LightSwitch {
On,
Off
}
public void SwitchOn() {
Switch(LightSwitch.On);
}
public void SwitchOff() {
Switch(LightSwitch.Off);
}
private void Switch(LightSwitch pos) {
position = pos;
}
}
答案 1 :(得分:3)
来自JLS
嵌套枚举类型是隐式静态的。允许 显式声明嵌套的枚举类型是静态的。
这意味着无法定义本地(§14.3)枚举,或 在内部类中定义枚举(第8.1.3节)。
此外,他们通常是隐含的最终决定。将枚举作为类的一部分是一般模式,因为它们通常表现为常量。
枚举类型是隐式final的,除非它包含至少一个具有类主体的枚举常量。
答案 2 :(得分:0)
您无法在方法中定义枚举,但您可以定义类,因此如果您真的希望以这种方式设计方法,则可以定义本地类对象的数组。
public void doSomething() {
class Country {
int population = 0;
String name = null;
public Country(int population, String name) {
this.population = population;
this.name = name;
}
}
Country[] countries = { new Country(85029304, "Germany"), new Country(61492053, "Spain") };
// do stuff with countries
}