如何引用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.*;