java - 不兼容的类型。找到:'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'
解决方案
你不能那样做。参考:
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?");
}
推荐阅读
- javascript - 如何使用 jquery 在 HTML 画布中的选定图像对象中添加渐变效果
- javascript - jquery .hover() outFunction 闪烁的bug
- angular - 如何在鼠标输入时显示一个元素 - Angular 4+
- javascript - 如何根据点击更改文本而不将其更改回来,除非页面刷新
- mysql - 为什么我在 mysql 中收到语法错误?
- python - 如何比较两个excel文件以检查python中的格式?
- cordova - IBM Mobilefirst Pugin 不支持 Cordova 版本 >7
- amazon-web-services - 如何解决“ssh_exchange_identification: read: Connection reset”错误?
- javascript - Javascript For-loop 时间克隆 thead
- python - UnboundLocalError:分配前引用的局部变量“html”