使用来自不同类的Java枚举?

Bha*_*axy 28 java enums class

如果我有一个像Java这样的类:

public class Test
{
    // ...
    public enum Status {
        Opened,
        Closed,
        Waiting
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我在不同的类文件中有一个不同的类(但在同一个项目/文件夹中):

public class UsingEnums
{
    public static void Main(String[] args)
    {
        Test test = new Test(); // new Test object (storing enum)

        switch(test.getStatus()) // returns the current status
        {
            case Status.Opened:
                // do something
            // break and other cases
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我实际上在一个类中有一个枚举,在另一个类中使用(在我的例子中,特别是在switch-case语句中).

但是,当我这样做时,我收到如下错误:

找不到符号 - 类状态

我该如何解决这个问题?

Pau*_*ora 79

枚举开关案例标签必须是枚举常量的非限定名称:

switch (test.getStatus()) // returns the current status
{
    case Opened:
        // do something
        // break and other cases
}
Run Code Online (Sandbox Code Playgroud)

它在另一个类中定义并不重要.在任何情况下,编译器都能够根据您的switch语句推断枚举的类型,并且不需要限定常量名称.无论出于何种原因,使用限定名称是无效的语法.

此要求由JLS§14.11规定:

SwitchLabel:
   case ConstantExpression :
   case EnumConstantName :
   default :

EnumConstantName:
   Identifier
Run Code Online (Sandbox Code Playgroud)

(感谢Mark Peters的相关帖子供参考.)


tal*_*las 10

如果你的getStatus()回报实际上是Status你的情况应该是:

case Opened:
Run Code Online (Sandbox Code Playgroud)

如果你试试:

case Test.Status.Opened:
Run Code Online (Sandbox Code Playgroud)

你的IDE会给你一个错误:

an enum switch case label must be the unqualified name of an enumeration constant
Run Code Online (Sandbox Code Playgroud)