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から

ネストされた列挙型は暗黙的に静的です。ネストされた列挙型を static として明示的に宣言することは許容されます。

これは、ローカル (§14.3) 列挙型を定義すること、または内部クラス (§8.1.3) で列挙型を定義することは不可能であることを意味します。

また、それらは一般に暗黙のうちに最終的なものです。通常、列挙型は定数として動作するため、クラスの一部として列挙型を使用するのが一般的なパターンです。

列挙型は、クラス本体を持つ列挙型定数が少なくとも 1 つ含まれていない限り、暗黙的に final です。

于 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 に答える