为什么Java不允许在方法中定义枚举?

可能重复:
Java:本地枚举

为什么我们不能在java中的特定方法中定义枚举? 如果我有一个场景,我将在方法中使用这些枚举值,而不是在任何其他地方。 在方法中声明而不是在全局定义它不是很好吗? 我的意思是公开或默认。

您无法在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; } } 

来自JLS

嵌套枚举类型是隐式静态的。 允许将嵌套的枚举类型显式声明为静态。

这意味着无法定义本地(§14.3)枚举,或在内部类中定义枚举(第8.1.3节)。

而且,它们通常是隐含的最终结果。 将枚举作为类的一部分是一般模式,因为它们通常表现为常量。

枚举类型是隐式final的,除非它包含至少一个具有类主体的枚举常量。

您无法在方法中定义枚举,但可以定义类,因此如果您真的希望以这种方式设计方法,则可以定义本地类对象的数组。

 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 }