-2

次のような列挙型を定義するライブラリを使用する必要があります。

public static enum LibVal {
    VAL_1,
    VAL_2,
    VAL_3;
}

この列挙型をメソッド引数として取得します。

public void libCallback(LibVal val){
    //.... some implementation
}

メソッド内switchLibVal列挙型を使用することを Java が許可しないのはなぜですか? libCallbackただし、ライブラリがその列挙型を非静的として宣言した場合、それは機能します。このSO-answer が述べているように、これは紛らわしいですが、実際には違いはありません...

編集:

bobkilla が述べたように: スイッチ内で LibVal.VAL_1 を試しましたが、これは許可する必要があります。動作しないコードサンプルを提供します!

class TestClassForEnum {
    public static enum TestEnum{ ONE, TWO; }
}

class WhichUsesEnumInsideMethod{

    //completely unrelated to TestClassForEnum.TestEnum!!!
    public static final int ONE = 0x1282

    void doSomethingWithEnum(TestEnum e){
        //here I cannot switch:

        //FORBIDDEN BY JAVA
        switch (e) {
            case TestEnum.ONE:
                    //...

        }

        //Cannot USE EITHER, because ONE is a static final int inside this scope?!:
        switch (e) {
            case ONE:
                    //...

        }

 }
4

3 に答える 3

2

すべての列挙型はデフォルトで静的であり、違いはありません。静的にするかどうかに関係なく、任意の列挙型をオンにすることができます。

ここでこの例を参照してくださいhttp://ideone.com/n5oQoi

public class Main {
    public static enum LibVal {
        VAL_1,
        VAL_2,
        VAL_3;
    }

    public void libCallback(LibVal val){
        switch(val) {
            case VAL_1: System.out.println("VAL_1 was chosen");
        }
    }

    public static void main(String[] ignored) {
        new Main().libCallback(LibVal.VAL_1);
    }
}
于 2013-05-13T11:42:44.887 に答える