9

可能重复:
Java:本地枚举

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

4

3 回答 3

8

您不能如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;
    }
}
于 2012-06-14T04:24:18.163 回答
3

来自JLS

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

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

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

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

于 2012-06-14T04:30:47.100 回答
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
}
于 2012-06-14T04:31:30.140 回答