启用Enum不会导入类

时间:2016-03-08 16:14:32

标签: java

说我有一个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;
    }
}

现在,如果我在switchMyPojo.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值?

1 个答案:

答案 0 :(得分:9)

这不是枚举类型本身,而是枚举常量,其范围包括case语句的switch标签,如this section of the Java Language Specification中所述:

  

声明的范围是程序的一个区域,在该区域内,声明声明的实体可以使用简单的名称引用,前提是它是可见的(§6.4.1)。

     

...

     

在枚举类型T中声明的枚举常量C的范围是T的主体,以及switch语句的任何case标签,其表达式为枚举类型T(第14.11节)。