为什么Java禁止打开静态枚举?

Raf*_*l T -2 java enums static switch-statement

我必须使用一个定义这样的枚举的库:

public static enum LibVal {
    VAL_1,
    VAL_2,
    VAL_3;
}
Run Code Online (Sandbox Code Playgroud)

我把这个枚举作为一个方法参数:

public void libCallback(LibVal val){
    //.... some implementation
}
Run Code Online (Sandbox Code Playgroud)

为什么Java的禁止使用的switchLibVal内部枚举libCallback的方法?但是,如果lib已将其枚举声明为非静态,则可以使用.这是一个令人困惑的,因为这个SO答案说明,确实没有区别......

编辑:

正如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:
                    //...

        }

 }
Run Code Online (Sandbox Code Playgroud)

小智 5

这不起作用:

switch(val) {
            case LibVal.VAL_1: System.out.println("VAL_1 was chosen");
        }
Run Code Online (Sandbox Code Playgroud)

这将工作:

switch(val) {
            case VAL_1: System.out.println("VAL_1 was chosen");
        }
Run Code Online (Sandbox Code Playgroud)