【问题标题】:Using enums for switch case in Java在 Java 中使用枚举作为 switch case
【发布时间】:2014-05-14 08:28:43
【问题描述】:

我正在实现一个简单的 switch case,它将打开一个 Enum 值。以下是代码

ScheduleType scheduleType = ScheduleType.valueOf(scheduleTypeString);

switch (scheduleType) {

       case ScheduleType.CRON_EXPRESSION: 
                    System.out.println("Cron");
                    break;
}

但我的 IDE 中出现以下错误:

The qualified case label ScheduleType.CRON_EXPRESSION must be replaced with the unqualified enum constant CRON_EXPRESSION

谁能解释我为什么会收到这个错误以及代码有什么问题。 我知道正确的做法是删除 ClassName,但为什么我需要这样做? 因为通常在比较中我确实使用它,例如在 equals 和 all 中。 谢谢

【问题讨论】:

  • 错误告诉你确切地你必须做什么!
  • 编译器再友好不过了!
  • @SambhavSharma 他们可能是同情票,坦率地说,支持者应该在这里解释他们的理由。我并不是要成为一个混蛋,但这并不是一个好问题。编译器错误会准确告诉您如何解决此问题。我投了反对票,因为“它没有显示出任何研究成果”。
  • @SambhavSharma 我的回答涉及到原因部分。
  • 我从这个问题中学到了一些东西,我不知道 Ajay 发布的信息。

标签: java spring jakarta-ee enums


【解决方案1】:

Mike 已经解释了方法部分。

我将尝试解释为什么部分。

仅当您比较相同类型的枚举时,switch case 才有意义。 将 E1 类型的枚举与 E2 类型的枚举进行比较是没有意义的。

有一个bug 提出请求此功能,涉及到这一点。

【讨论】:

    【解决方案2】:

    省略类名。 case ScheduleType.CRON_EXPRESSION: 应该改为 case CRON_EXPRESSION:

    或者换句话说,ScheduleType.CRON_EXPRESSION 必须替换为不合格的枚举常量 CRON_EXPRESSION。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-30
      • 2021-12-17
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多