如何在不指定类型的情况下引用我的Java Enum

Bil*_*l K 76 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) {}
}
Run Code Online (Sandbox Code Playgroud)

如果我指定MyEnum.E1它工作正常,但我真的只想把它作为"E1".知道如何实现这一目标,还是必须在另一个文件中定义才能实现这一目标?

结论:我无法获得导入正确的语法.由于有几个答案表明这是可能的,我将选择一个能够提供我所需语法的语言,并提升其他语法.

顺便说一句,这是一个REALLY STRANGE的一部分(在我让静态导入工作之前),我写的一个使用枚举的switch语句不允许enum以其类型为前缀 - 所有其余的代码需要它.伤了我的脑袋.

Pas*_*ent 125

实际上,您可以静态导入嵌套枚举.下面的代码编译正常:

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) {}
}
Run Code Online (Sandbox Code Playgroud)

  • @Bill K,为什么你认为它应该自动运作?那你怎么期望这个呢?A类{enum B {X,Y}; 枚举C {X,Z}; } (5认同)
  • 此解决方案仅适用于因为MyEnum在Test之外可见.如果MyEnum是私有的,则解决方案将不起作用. (2认同)
  • 不要忘记最后一部分,“import static mypackage.Test.MyEnum.*;”中的符号“.*” 正如我所做的! (2认同)

Yis*_*hai 15

您可以在嵌套类上执行静态导入:

import static apackage.Test.Enum.*;
Run Code Online (Sandbox Code Playgroud)


Jay*_*yen 7

Test 类必须在包中定义才能导入。

使用TestIT WORKS)中定义的包:

package mypackage;
Run Code Online (Sandbox Code Playgroud)

您可以使用:

import static mypackage.Test.MyEnum.*;
Run Code Online (Sandbox Code Playgroud)

没有定义包,你不能使用(不工作):

import static Test.MyEnum.*;
Run Code Online (Sandbox Code Playgroud)