说我有一个Enum如下:
package stackoverflow.models;
public enum MyEnum {
VALUE_1,
VALUE_2;
}
然后我有一个POJO将这个Enum作为其中的一个领域:
package stackoverflow.models;
public class MyPojo {
private MyEnum myEnum;
public MyEnum getMyEnum() {
return myEnum;
}
public void setMyEnum(MyEnum myEnum) {
this.myEnum = myEnum;
}
}
现在,如果我在switch
上MyPojo.getMyEnum()
,我不需要将Enum直接导入我的班级:
package stackoverflow.classes;
import stackoverflow.models.MyPojo;
public class MyClass {
public static void main(final String... args) {
final MyPojo pojo = new MyPojo();
switch(pojo.getMyEnum()) {
case VALUE_1:
break;
case VALUE_2:
break;
default:
break;
}
}
}
我只是想知道为什么会这样?如果Enum值没有直接导入Enum,它如何解析Enum值?
答案 0 :(得分:9)
这不是枚举类型本身,而是枚举常量,其范围包括case
语句的switch
标签,如this section of the Java Language Specification中所述:
声明的范围是程序的一个区域,在该区域内,声明声明的实体可以使用简单的名称引用,前提是它是可见的(§6.4.1)。
...
在枚举类型T中声明的枚举常量C的范围是T的主体,以及
switch
语句的任何case标签,其表达式为枚举类型T(第14.11节)。