【问题标题】:How to use enum in switch case如何在开关盒中使用枚举
【发布时间】:2013-01-14 19:45:45
【问题描述】:

我正在尝试检查我的 VO 中设置了哪些值。

下面是我的课。我正进入(状态 "合格的案例标签 MyEnum.UserType.DOCTORS 必须替换为不合格的枚举常量 DOCTORS"

请帮我找出我在这里做错了什么。

MyEnum.java

public MyEnum{
    private UserType userType;

    public UserType getUserType(){
        return userType;
    }

    public void setUserType(UserType userType){
        this.userType = userType;
    }

    public static enum UserType{
        DOCTORS("D"),
        PATIENT("P"),
        STAFF("S");
    }

}

EnumTest.java

public EnumTest {

    .....
    public void onGoBack(MyEnum myEnum) {

        switch(myEnum.getUserType())
        {
            case UserType.DOCTORS: // this shows "The qualified case label MyEnum.UserType.DOCTORS must be replaced with the unqualified enum constant DOCTORS"
                break;

        }
    }

}

【问题讨论】:

  • 按照编译器的建议尝试使用case DOCTORS:
  • 你为什么不试着做错误信息说你应该做的事情?
  • 我发现在 SO 中至少提出一次这个问题很有用,并且赞成票的数量意味着人们同意我的观点。这种语法非常不寻常,当你不在定义常量的类时可以使用非限定常量名。
  • 这个错误还带有一些非常技术性的语言,许多人不会马上搞定。

标签: java enums switch-statement


【解决方案1】:

由于编译器知道您在 switch 语句中评估的枚举类型,您应该按照错误提示删除“合格”部分(在您的情况下:MyEnum.UserType.)并简单地使用“不合格”枚举@ 987654322@。见下文:

switch(myEnum.getUserType())
{
    case DOCTORS: 
        break;
}

【讨论】:

  • 阅读错误消息真的比在 SO 上发布问题并等待答案更难吗? :/
  • 如果你在另一个类中有另一个常量调用相同的东西怎么办?在这种情况下DOCTORS 不会模棱两可吗?
  • @HelloGoodbye 不,它不会有歧义,因为编译器确切地知道 switch 表达式计算为哪个枚举类型。
  • 马特·鲍尔,我们都处于不同的经验水平。无需斥责/贬低感谢您帮助的人。让我们保持专业。该用户花时间提出问题,并且可能只需要一些关于如何解释错误消息的指导。我个人是刚学Java的,我来这里是因为我也只是通过例外不知道答案。
  • Matt Ball,这个问题对我来说似乎是合理和明智的。鉴于我们可以在 Java 的其他任何地方使用 MyEnum.ABCMyEnum.XYZ,我很惊讶和困惑地发现 switch - case 中的相同语法是非法的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-28
  • 1970-01-01
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 2017-08-21
相关资源
最近更新 更多