我以为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.lang.Enum
是enum
,但不是吗?
不,不是。
“
enum
型E
的直接超类是Enum<E>
(§8.1.4)。” JLS 8.9。
然而,这并没有使Enum
成为enum
类。
另请注意,你不能extend
类Enum
:
*“如果ClassType命名类
Enum
或任何Enum
(§8.9)的调用,那么这是一个编译时错误。”* JLS 8.1.4。
由于Enum
是abstract
,你不能直接实例化该类,或者除了声明enum
类型之外还要创建一个“枚举类”。简而言之,Enum
有点特殊,而且直接使用有限。
我希望您在switch
语句中遇到此编译错误。涉及枚举的switch
语句需要特定的enum
类...以及将在切换案例中使用的特定枚举常量集。类Enum<E>
不是声明常量的地方。 (因此,从语言学的角度来看,它是行不通的。)
你不能这样做。参考:
JLS§14.11开关语句“[开关]表达式的类型必须是char,byte,short,int,Character,Byte,Short,Integer,String或枚举类型(§8.9),或编译时错误发生“。
所有枚举类型都隐式扩展了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?");
}
enum CarType{
HATCHBACK,SEDAN,SUV
}
检查基于枚举
CarType cartype;
switch(cartype){
case HATCHBACK:
dosomethingfor hatchback;
break;
case SEDAN:
dosomethingfor sedan;
break;
case SUV:
dosomethingfor suv;
break;
default:
do something default;
}