如何引用Java枚举而不指定其类型

如何引用Java枚举而不指定其类型,java,enums,Java,Enums,我有一个类,它定义自己的枚举,如下所示: public class Test { enum MyEnum{E1, E2}; public static void aTestMethod() { Test2(E1); // << Gives "E1 cannot be resolved" in eclipse. } public Test2(MyEnum e) {} } 公共类测试 { 枚举MyEnum{E1,E2}; 公共静态无效

我有一个类,它定义自己的枚举,如下所示:

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  // << Gives "E1 cannot be resolved" in eclipse.
    }
    public Test2(MyEnum e) {}
}
公共类测试
{
枚举MyEnum{E1,E2};
公共静态无效aTestMethod(){
Test2(E1);//实际上,您可以对嵌套枚举执行一系列操作。下面的代码编译得很好:

package mypackage;

import static mypackage.Test.MyEnum.*;

public class Test
{
    enum MyEnum{E1, E2};

    public static void aTestMethod() {
        Test2(E1);  
    }

    public static void Test2(MyEnum e) {}
}

可以对嵌套类执行静态导入:

import static apackage.Test.Enum.*;

测试类必须在要导入的包中定义

使用
测试中定义的程序包(它可以正常工作):

您可以使用:

import static mypackage.Test.MyEnum.*;
如果未定义包,则无法使用(不起作用):


我在问题中提到这是一个解决方案,但我真的不想这么做。枚举只在这一个文件中使用。奇怪的是,这不只是自动工作。虽然您必须使用静态导入,但您不需要在自己的类中定义它。@Bill K,为什么您认为它应该自动工作?您会怎么做你认为这会起作用吗?类A{enum B{X,Y};enum C{X,Z};}这个解决方案起作用只是因为MyEnum在测试之外是可见的。如果MyEnum是私有的,解决方案将不起作用。不要忘记“导入静态mypackage.Test.MyEnum.*”中的最后一部分符号“*”;就像我做的那样!关于“真的奇怪”switch语句上的行为:Java对switch语句中的所有枚举执行此操作。因为您知道要切换的类型,所以他们认为没有理由让您在每个case块中再次指定该类型。我猜让我感到困惑的是,它不允许枚举类型前缀。其他任何地方都需要前缀(如果没有导入)或可选。我同意您所说的
开关
不一致性,这会让经验不足的Java程序员挠头。
import static mypackage.Test.MyEnum.*;
import static Test.MyEnum.*;