首页 > 解决方案 > 不兼容的类型。找到:'java.lang.Enum',需要:'char、byte、short、int、Character、Byte、Short、Integer、String 或 enum'

问题描述

我以为 java.lang.Enum 是一个枚举,但不是吗?

void test(Enum e) {
 switch (e) {
  case A: ...
 }
}

不兼容的类型。找到:'java.lang.Enum',需要:'char、byte、short、int、Character、Byte、Short、Integer、String 或 enum'

标签: java

解决方案


你不能那样做。参考:

JLS §14.11 switch 语句“[switch] 表达式的类型必须是 char、byte、short、int、Character、Byte、Short、Integer、String 或枚举类型 (§8.9),或编译时错误发生。”</p>

所有枚举类型都隐式扩展java.lang.Enum,但枚举是一种特殊的引用类型,它本身不是一个类,而更像是从同一个基类 Enum 扩展而来的类的类别。任何由关键字“enum”声明的类型本身就是一个不同的类。

完成这项工作的正确方法是首先单独创建您的枚举,例如

enum Day
{
  SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY 
}

然后将枚举作为参数提供给您的方法,如下所示:

public static void printTodaysThought(Day theDay)

并在 switch 语句中使用,如下所示:

switch (theDay)
    {
      case MONDAY:
      case TUESDAY:
      case WEDNESDAY:
      case THURSDAY:  System.out.println("THURSDAY");
                      break;

      case FRIDAY:    System.out.println("FRIDAY");
                      break;

      case SATURDAY:
      case SUNDAY:    System.out.println("SUNDAY");
                      break;

      default:        System.out.println("What day is it?");
    }

推荐阅读