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

时间:2012-06-14 04:22:31

标签: java methods enums

  

可能重复:
  Java: Local Enums

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

3 个答案:

答案 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
}