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的禁止使用的switch与LibVal内部枚举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)